Numberformat 了解您所在地区的数字书写方式。例如在意大利你有“,”作为小数点。所以:
NumberFormat nf = NumberFormat.getInstance(Locale.ITALY);
Number number = nf.parse("0,1");
System.err.println(number);
0.1
如果你使用了“.”仅用于创建组(例如数千个),您将得到 1 作为结果(正确,因为 01 是 1):
NumberFormat nf = NumberFormat.getInstance(Locale.ITALY);
Number number = nf.parse("0.1");
System.err.println(number);
1
现在英语语言环境正好相反:
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
Number number = nf.parse("0.1");
System.err.println(number);
0.1
最后是带有“,”的英文:
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
Number number = nf.parse("0,1");
System.err.println(number);
1
有人争论尾随 0。所以:
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
double d = nf.parse("17").doubleValue();
double d2 = nf.parse("17.000").doubleValue();
d 和 d2 将具有相同的值。这与我在代码中分配变量的行为完全相同。
double d = 17;
double d2 = 17.000;
两个变量将包含相同的数字。在这两种情况下都不会损失精度。
比较也会正确返回true:
boolean test = nf.parse("17") == nf.parse("17.000");
System.err.print( test );
是的
这与代码中的行为相同:
boolean test = 17 == 17.000;
System.err.print( test );
是的
最后,NumberFormat 的返回类型是“数字”。它将一个数字解析为:一个数字。所以这既不是 Double 也不是 Long (就像 Animal 既不是 Dog 也不是 Cat,即使 Dog 是 Animal )。
如果您需要可靠的双精度,只需使用 number.doubleValue() 即可可靠地为您提供所需的类型。