private void fillCompatible(int precision,char[] digits,int nDigits,int exp,boolean isNegative){
  int startIndex=isNegative ? 1 : 0;
  if (exp > 0 && exp < 8) {
    if (nDigits < exp) {
      int extraZeros=exp - nDigits;
      mantissa=create(isNegative,nDigits + extraZeros + 2);
      System.arraycopy(digits,0,mantissa,startIndex,nDigits);
      Arrays.fill(mantissa,startIndex + nDigits,startIndex + nDigits + extraZeros,'0');
      mantissa[startIndex + nDigits + extraZeros]='.';
      mantissa[startIndex + nDigits + extraZeros+ 1]='0';
    }
 else     if (exp < nDigits) {
      int t=Math.min(nDigits - exp,precision);
      mantissa=create(isNegative,exp + 1 + t);
      System.arraycopy(digits,0,mantissa,startIndex,exp);
      mantissa[startIndex + exp]='.';
      System.arraycopy(digits,exp,mantissa,startIndex + exp + 1,t);
    }
 else {
      mantissa=create(isNegative,nDigits + 2);
      System.arraycopy(digits,0,mantissa,startIndex,nDigits);
      mantissa[startIndex + nDigits]='.';
      mantissa[startIndex + nDigits + 1]='0';
    }
  }
 else   if (exp <= 0 && exp > -3) {
    int zeros=Math.max(0,Math.min(-exp,precision));
    int t=Math.max(0,Math.min(nDigits,precision + exp));
    if (zeros > 0) {
      mantissa=create(isNegative,zeros + 2 + t);
      mantissa[startIndex]='0';
      mantissa[startIndex + 1]='.';
      Arrays.fill(mantissa,startIndex + 2,startIndex + 2 + zeros,'0');
      if (t > 0) {
        System.arraycopy(digits,0,mantissa,startIndex + 2 + zeros,t);
      }
    }
 else     if (t > 0) {
      mantissa=create(isNegative,zeros + 2 + t);
      mantissa[startIndex]='0';
      mantissa[startIndex + 1]='.';
      System.arraycopy(digits,0,mantissa,startIndex + 2,t);
    }
 else {
      this.mantissa=create(isNegative,1);
      this.mantissa[startIndex]='0';
    }
  }
 else {
    if (nDigits > 1) {
      mantissa=create(isNegative,nDigits + 1);
      mantissa[startIndex]=digits[0];
      mantissa[startIndex + 1]='.';
      System.arraycopy(digits,1,mantissa,startIndex + 2,nDigits - 1);
    }
 else {
      mantissa=create(isNegative,3);
      mantissa[startIndex]=digits[0];
      mantissa[startIndex + 1]='.';
      mantissa[startIndex + 2]='0';
    }
    int e, expStartIntex;
    boolean isNegExp=(exp <= 0);
    if (isNegExp) {
      e=-exp + 1;
      expStartIntex=1;
    }
 else {
      e=exp - 1;
      expStartIntex=0;
    }
    if (e <= 9) {
      exponent=create(isNegExp,1);
      exponent[expStartIntex]=(char)(e + '0');
    }
 else     if (e <= 99) {
      exponent=create(isNegExp,2);
      exponent[expStartIntex]=(char)(e / 10 + '0');
      exponent[expStartIntex + 1]=(char)(e % 10 + '0');
    }
 else {
      exponent=create(isNegExp,3);
      exponent[expStartIntex]=(char)(e / 100 + '0');
      e%=100;
      exponent[expStartIntex + 1]=(char)(e / 10 + '0');
      exponent[expStartIntex + 2]=(char)(e % 10 + '0');
    }
  }
}

private void fillCompatible ( int precision , char [ ] digits , int nDigits , int exp , boolean isNegative ) { int startIndex = isNegative ? 1 : 0 ; if ( exp > 0 && exp < 8 ) { if ( nDigits < exp ) { int extraZeros = exp - nDigits ; mantissa = create ( isNegative , nDigits + extraZeros + 2 ) ; System . arraycopy ( digits , 0 , mantissa , startIndex , nDigits ) ; Arrays . fill ( mantissa , startIndex + nDigits , startIndex + nDigits + extraZeros , '0' ) ; mantissa [ startIndex + nDigits + extraZeros ] = '.' ; mantissa [ startIndex + nDigits + extraZeros + 1 ] = '0' ; } else if ( exp < nDigits ) { int t = Math . min ( nDigits - exp , precision ) ; mantissa = create ( isNegative , exp + 1 + t ) ; System . arraycopy ( digits , 0 , mantissa , startIndex , exp ) ; mantissa [ startIndex + exp ] = '.' ; System . arraycopy ( digits , exp , mantissa , startIndex + exp + 1 , t ) ; } else { mantissa = create ( isNegative , nDigits + 2 ) ; System . arraycopy ( digits , 0 , mantissa , startIndex , nDigits ) ; mantissa [ startIndex + nDigits ] = '.' ; mantissa [ startIndex + nDigits + 1 ] = '0' ; } } else if ( exp <= 0 && exp > - 3 ) { int zeros = Math . max ( 0 , Math . min ( - exp , precision ) ) ; int t = Math . max ( 0 , Math . min ( nDigits , precision + exp ) ) ; if ( zeros > 0 ) { mantissa = create ( isNegative , zeros + 2 + t ) ; mantissa [ startIndex ] = '0' ; mantissa [ startIndex + 1 ] = '.' ; Arrays . fill ( mantissa , startIndex + 2 , startIndex + 2 + zeros , '0' ) ; if ( t > 0 ) { System . arraycopy ( digits , 0 , mantissa , startIndex + 2 + zeros , t ) ; } } else if ( t > 0 ) { mantissa = create ( isNegative , zeros + 2 + t ) ; mantissa [ startIndex ] = '0' ; mantissa [ startIndex + 1 ] = '.' ; System . arraycopy ( digits , 0 , mantissa , startIndex + 2 , t ) ; } else { this . mantissa = create ( isNegative , 1 ) ; this . mantissa [ startIndex ] = '0' ; } } else { if ( nDigits > 1 ) { mantissa = create ( isNegative , nDigits + 1 ) ; mantissa [ startIndex ] = digits [ 0 ] ; mantissa [ startIndex + 1 ] = '.' ; System . arraycopy ( digits , 1 , mantissa , startIndex + 2 , nDigits - 1 ) ; } else { mantissa = create ( isNegative , 3 ) ; mantissa [ startIndex ] = digits [ 0 ] ; mantissa [ startIndex + 1 ] = '.' ; mantissa [ startIndex + 2 ] = '0' ; } int e , expStartIntex ; boolean isNegExp = ( exp <= 0 ) ; if ( isNegExp ) { e = - exp + 1 ; expStartIntex = 1 ; } else { e = exp - 1 ; expStartIntex = 0 ; } if ( e <= 9 ) { exponent = create ( isNegExp , 1 ) ; exponent [ expStartIntex ] = ( char ) ( e + '0' ) ; } else if ( e <= 99 ) { exponent = create ( isNegExp , 2 ) ; exponent [ expStartIntex ] = ( char ) ( e / 10 + '0' ) ; exponent [ expStartIntex + 1 ] = ( char ) ( e % 10 + '0' ) ; } else { exponent = create ( isNegExp , 3 ) ; exponent [ expStartIntex ] = ( char ) ( e / 100 + '0' ) ; e %= 100 ; exponent [ expStartIntex + 1 ] = ( char ) ( e / 10 + '0' ) ; exponent [ expStartIntex + 2 ] = ( char ) ( e % 10 + '0' ) ; } } }
fills mantissa and exponent char arrays for compatible format .
