已在SegmentFault提问,目前没有答案,自行实现如下:
1 private static String getRealNumOfScientificNotation(String doubleStr) { 2 int indexOfE = doubleStr.indexOf('E'); 3 int indexOfPoint = doubleStr.indexOf('.'); 4 // 整数部分 5 BigInteger zs = new BigInteger(doubleStr.substring(0, indexOfPoint)); 6 // 小数部分 7 BigInteger xs = new BigInteger(doubleStr.substring(indexOfPoint 8 + BigInteger.ONE.intValue(), indexOfE)); 9 // 指数 10 int pow = Integer.valueOf(doubleStr.substring(indexOfE 11 + BigInteger.ONE.intValue())); 12 StringBuffer buffer = new StringBuffer(); 13 // e.g. 1.23E-5 14 if (pow < 0) { 15 for (int i = 0; i < -pow; i++) { 16 buffer.append(0); 17 } 18 buffer.insert(BigInteger.ONE.intValue(), "."); 19 buffer.append(zs.toString()).append(xs.toString()); 20 doubleStr = buffer.toString(); 21 } else { 22 int xsLen = xs.toByteArray().length; 23 int needFill0 = pow - xsLen; 24 if (needFill0 < 0) { 25 // e.g. 1.234E2 26 buffer.append(xs); 27 buffer.insert(pow, "."); 28 buffer.insert(0, zs); 29 doubleStr = buffer.toString(); 30 } else { 31 // e.g. 1.234E6 or 1.234E3 32 for (int i = 0; i < needFill0; i++) { 33 buffer.append(0); 34 } 35 buffer.insert(0, xs); 36 buffer.insert(0, zs); 37 doubleStr = buffer.toString(); 38 } 39 } 40 return doubleStr; 41 }