question: 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' ) ; } } }
target:  Fills mantissa and exponent char arrays for compatible format.