我想要一个有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);
希望它能帮助你