【发布时间】:2018-10-11 15:25:59
【问题描述】:
我正在尝试正确解析数字的字符串表示形式。 Parser 为我提供了数值 Integer/Long/Float/Double 但是当我尝试使用 NumberFormat 解析时:
String number = "1.0";
NumberFormat.getNumberInstance().parser(number);
它返回一个 Long 类型。但是,当我尝试解析“1.1”时,它会正确推断出 Double(为什么不浮动?)。 我应该编写自己的数字解析器还是有可能以正确推断类型的方式对其进行调整。整数作为整数(不是长整数)。浮动为浮动(不是双精度)。 Long 和 Double 一样 Double。
【问题讨论】:
-
你需要这个做什么?如果你解析一个字符串,你会想把它分配给某个东西……那么你想把它分配给什么类型的变量呢?
-
1.0 在 java 中是 double 的。对于浮点数,您必须使用 1.0f 表示
-
如果您使用 NumberFormat 解析字符串,它将返回一个 Number 实例。之后,您可以键入检查 Number instanceof Integer/Long/Float/Double 是否。然后你知道它是什么类型的数字,所以你可以调用 Number.intValue() 等等。我知道如何做到这一点并且它正在工作。我只需要调整它以便正确解析。我看到了带有自定义解析器规则的 DecimalFormat,但这是最后的手段。
-
@user2207495,首先你需要什么样的数字格式?如果它只是小数的问题,那么你应该可以使用 double 和 long ,而无需担心其余的!然后它变得非常简单,如果用例是特定的,例如货币或百分比等等,那么您应该在
NumberFormat类中挖掘更多内容,否则使用最简单的方法就可以了。
标签: java type-deduction