DecimalFormat( "#0.000" ) 不像 1.321 那样以正确的方式格式化,而不是这个 它使 1,321



我想要一个有3个小数点的Double我这样做:

String sAveragePrice;
Double dAveragePrice = holePrice/(allPrices.size());    // delivers 1.3210004       
DecimalFormat threeZeroes = new DecimalFormat("#0.000");
sAveragePrice = threeZeroes.format(dAveragePrice);          // delivers then 1,321

格式化后,我得到的不是1.321,而是1321。1321随后抛出一个NumberformatException此时抛出:

Double priceInt = Double.parseDouble(sAveragePrice);  // throws NumberFormatException

奇怪的是,我有这个代码直到3周,它没有任何问题。但今天当我再次启动我的应用程序时,它出现了问题。但我没有更改任何内容。

有人能帮我吗我也试过这个:

NumberFormat format = NumberFormat.getNumberInstance();
format.setMinimumFractionDigits(3);
format.setMaximumFractionDigits(3);
sAveragePrice = format.format(dAveragePrice);

但它也为我提供了一个","而不是一个"."来表示替身。

请尝试使用区域设置的数字格式。

Number format = NumberFormat.getNumberInstance(Locale.ITALIAN);

Java SDK具有数量有限的预定义区域设置,因此对于其他区域设置(例如,对于俄语),您可以使用以下代码段:

Number format = NumberFormat.getNumberInstance(new Locale("ru", "RU"));
Number format = NumberFormat.getNumberInstance(new Locale("it", "IT")); // etc... 

此示例代码可能会帮助您。。。

    Locale locale = Locale.getDefault();
    // set Locale.US as default
    Locale.setDefault(Locale.US);
    DecimalFormat decimalFormat = new DecimalFormat("##.000");
    double d = 14.5589634d;
    String format = decimalFormat.format(d);
    System.out.println(format);// prints 14.559
    // back to default locale
    Locale.setDefault(locale);

看看这个SO问题

如何将DecimalFormat的小数分隔符从逗号更改为点/点?

基本上,你的输出将是特定于区域设置的,所以如果你有一个帧的区域设置,那么它将不同于美国的区域设置。

尝试

NumberFormat format = NumberFormat.getNumberInstance(Locale.US);

使用这种格式使用#而不是0。这是正确的格式来声明你的模式

String sAveragePrice;
Double dAveragePrice = holePrice/(allPrices.size());       
DecimalFormat threeZeroes = new DecimalFormat("#.###");
sAveragePrice = threeZeroes.format(dAveragePrice);   

希望它能帮助你

最新更新