我注意到Java的DecimalFormat
类的一些行为我不太明白。特别是用科学记数法表示小数点。
参考这个测试程序(我还在Java 6上):
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) {
System.out.println(formatValue("##0.0E0", 34627.2)); // (A) 34.63E3
System.out.println(formatValue("##0.00E0", 346272.2)); // (B) 346.3E3
System.out.println(formatValue("##0.0E0", 300000)); // (C) 300E3
}
private static String formatValue(String pattern, double value) {
DecimalFormat decimalFormat = new DecimalFormat(pattern);
return decimalFormat.format(value);
}
}
问题:
(1)当我的模式要求一位数时,为什么(A)小数点后有2位数?
使用类似的模式(“## 0.0E + 0”)和相同的值,Excel会生成预期的“34.6E + 3”。
如果我decimalFormat.setMaximumFractionDigits(0)
,我可以让DecimalFormat产生相同的输出,这让我更加困惑。
将此与(B)进行对比,其中输入346272.2而不是34627.2,并且这个产生预期的小数位数。
(2)对于(C),为什么我的模式中小数点后的单个数字会被忽略?
为什么输出不是“300.0E3”而是?这就是Excel产生的。
我半怀疑这个答案与问题1类似。
(3)最后,一个可选的红利问题,是否有人知道格式器/工具是否更忠实地匹配Excel TEXT()
功能的功能?
我希望找到一种方法来模仿这种行为,或者尽可能地接近,而不必编写我自己的格式化程序。
提前致谢。