我正在尝试类NumberFormat
的方法和功能,我已经达到了一个奇怪的结果。我编译并运行以下程序:
public static void main(String[] args) {
Locale loc = Locale.US;
NumberFormat nf = NumberFormat.getInstance(loc);
System.out.println("Max: "+nf.getMaximumFractionDigits());
System.out.println("Min: "+nf.getMinimumFractionDigits());
try {
Number d = nf.parse("4527.9997539");
System.out.println(d);
// nf.setMaximumFractionDigits(4);
System.out.println(nf.format(4527.999753));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出结果为:
Max: 3
Min: 0
4527.9997539
4,528
这意味着它没有考虑任何分数。如果我取消注释该行:
nf.setMaximumFractionDigits(4);
输出是:
Max: 3
Min: 0
4527.9997539
4,527.9998
换句话说,它运作正常。方法setMaximumFractionDigits()
实际发生了什么,并且第一种情况下它不包含包含3个小数位的数字?
答案 0 :(得分:12)
我终于找到了答案。方法setMaximumFractionDigits()
仅对方法format()
有效。它与parse()
无关。在我的代码片段中,我在手动将小数位数设置为4后使用方法format()
,因此它会影响结果。
答案 1 :(得分:3)
如果要手动设置小数位数,请使用以下选项之一:
首先:
//sets 'd' to 3 decimal places & then assigns it to 'formattedNum'
String formattedNum = String.format("%.3f", d); //variable 'd' taken from your code above
OR
//declares an object of 'DecimalFormat'
DecimalFormat aDF = new DecimalFormat("#.000");
//formats value stored in 'd' to three decimal places
String fomrattedNumber = aDF.format(d);
在我看来,第二种选择最适合你的情况。
答案 2 :(得分:1)
从解析的String创建的数字具有更多小数位数。但是当你尝试输出它时,使用格式MaximumFractionDigits
从任何给定的数字创建字符串。