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

How can I tell if a decimal number represented as a String will fit in a double?

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

如果它只包含数字并且它在 Integer.MIN_VALUE 和 Integer.MAX_VALUE 之间,我将它解析为一个 int,类似地 long 否则我正在使用 BigInteger。

如果它包含十进制值,我想将其解析为双精度或 BigDecimal。

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

and is therefore safe to parse as a double, or whether it needs to be held in a BigDecimal to prevent loss of precision?

这不是您正在寻找的答案,但由于您似乎担心精度损失,您应该使用 BigDecimal 代替任何 double

数字 0.1 可以 适合 double 中,但它不精确(因为 0.1 无法准确表示二进制)。

参见:Is floating point math broken?

Double class 包含这些常量:

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 是否可以在不丢失信息的情况下将值存储到可接受的程度。