gpt4 book ai didi

Java `NumberFormat` 假定数字类型不正确

转载 作者:行者123 更新时间:2023-12-02 10:17:39 25 4
gpt4 key购买 nike

例如:

NumberFormat nf = NumberFormat.newInstace();
Number number = nf.parse("0.0");

number 在运行时被解析为 java.lang.Integer,即使很明显该值为 Double。大多数时候这不是问题,因为无论如何该值都包装在 Number 中,但问题是 Number 没有实现 Comparable,我不得不求助于类型转换它。

是否有一个类假设 "0.0" 类似的字符串来表示 Double

最佳答案

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 );

true

这与代码中的行为相同:

   boolean test = 17 == 17.000;
System.err.print( test );

true

最后,NumberFormat 的返回类型是“Number”。它将数字解析为它本来的样子:一个数字。所以这既不是 Double 也不是 Long (就像 Animal 不是 Dog 也不是 Cat,即使 Dog 是 Animal )。

如果您需要可靠的 double ,您只需使用 number.doubleValue() 即 cocoa 靠地为您提供所需的类型。

关于Java `NumberFormat` 假定数字类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com