试图了解DecimalFormat科学记数法格式

时间:2014-02-18 10:10:15

标签: java formatting scientific-notation

我注意到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()功能的功能?

我希望找到一种方法来模仿这种行为,或者尽可能地接近,而不必编写我自己的格式化程序。

提前致谢。

0 个答案:

没有答案