private static int applyPrecision(int decExp,char[] digits,int nDigits,int prec){
  if (prec >= nDigits || prec < 0) {
    return decExp;
  }
  if (prec == 0) {
    if (digits[0] >= '5') {
      digits[0]='1';
      Arrays.fill(digits,1,nDigits,'0');
      return decExp + 1;
    }
 else {
      Arrays.fill(digits,0,nDigits,'0');
      return decExp;
    }
  }
  int q=digits[prec];
  if (q >= '5') {
    int i=prec;
    q=digits[--i];
    if (q == '9') {
      while (q == '9' && i > 0) {
        q=digits[--i];
      }
      if (q == '9') {
        digits[0]='1';
        Arrays.fill(digits,1,nDigits,'0');
        return decExp + 1;
      }
    }
    digits[i]=(char)(q + 1);
    Arrays.fill(digits,i + 1,nDigits,'0');
  }
 else {
    Arrays.fill(digits,prec,nDigits,'0');
  }
  return decExp;
}

private static int applyPrecision ( int decExp , char [ ] digits , int nDigits , int prec ) { if ( prec >= nDigits || prec < 0 ) { return decExp ; } if ( prec == 0 ) { if ( digits [ 0 ] >= '5' ) { digits [ 0 ] = '1' ; Arrays . fill ( digits , 1 , nDigits , '0' ) ; return decExp + 1 ; } else { Arrays . fill ( digits , 0 , nDigits , '0' ) ; return decExp ; } } int q = digits [ prec ] ; if ( q >= '5' ) { int i = prec ; q = digits [ -- i ] ; if ( q == '9' ) { while ( q == '9' && i > 0 ) { q = digits [ -- i ] ; } if ( q == '9' ) { digits [ 0 ] = '1' ; Arrays . fill ( digits , 1 , nDigits , '0' ) ; return decExp + 1 ; } } digits [ i ] = ( char ) ( q + 1 ) ; Arrays . fill ( digits , i + 1 , nDigits , '0' ) ; } else { Arrays . fill ( digits , prec , nDigits , '0' ) ; } return decExp ; }
returns new decexp in case of overflow .
