如何判断用字符串表示的十进制数字是否适合双精度



我正在解析一个字符串值,我知道它包含一个数字。

如果它只包含数字,并且介于Integer.MIN_VALUE和Integer.MAX_VALUE之间,我将其解析为int,类似地,如果不是,我将使用BigInteger。

如果它包含一个十进制值,我想将其解析为double或BigDecimal。

我可以测试字符串中的数值是否"适合"双精度,因此可以安全地解析为双精度,或者是否需要将其保存在BigDecimal中以防止精度损失?

,因此可以安全地解析为双精度,或者它是否需要保存在BigDecimal中以防止精度损失?

这不是您想要的答案,但由于您似乎担心精度损失,因此应该使用BigDecimal来代替任何double

数字0.1可以适合double中,但它并不精确(因为0.1不能用二进制精确表示(。

请参阅:浮点数学坏了吗?

Double类包含以下常量:

public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

如果可以的话,你可以用它们来进行检查
但是仅仅一个try/catch块:不是更容易吗

String str = "1234567890";
double number = 0;
try {
number = Double.parseDouble(str);
} catch (NumberFormatException e) {
e.printStackTrace();
// put extra code here
}

我会将其解析为BigDecimal,然后检查double是否可以在不丢失信息的情况下将值存储到可接受的程度。

相关内容