Java 如何判断表示为字符串的十进制数是否适合双精度?
我正在解析一个字符串值,我知道它包含一个数字 如果它只包含数字,并且介于Integer.MIN_值和Integer.MAX_值之间,我将把它解析为int,否则我将使用biginger 如果它包含一个十进制值,我想将其解析为double或BigDecimal 我是否可以测试字符串中的数值是否“适合”到一个double中,因此可以安全地解析为double,或者是否需要将其保存在BigDecimal中以防止精度损失 因此,是否可以安全地将其解析为double,或者是否需要将其保存在BigDecimal中以防止精度损失 这不是您要寻找的答案,但由于您似乎担心精度的损失,因此应该使用Java 如何判断表示为字符串的十进制数是否适合双精度?,java,types,casting,double,bigdecimal,Java,Types,Casting,Double,Bigdecimal,我正在解析一个字符串值,我知道它包含一个数字 如果它只包含数字,并且介于Integer.MIN_值和Integer.MAX_值之间,我将把它解析为int,否则我将使用biginger 如果它包含一个十进制值,我想将其解析为double或BigDecimal 我是否可以测试字符串中的数值是否“适合”到一个double中,因此可以安全地解析为double,或者是否需要将其保存在BigDecimal中以防止精度损失 因此,是否可以安全地将其解析为double,或者是否需要将其保存在BigDecimal
BigDecimal
来代替任何double
数字0.1
可以用double
表示,但并不精确(因为0.1
不能用二进制准确表示)
请参阅:双
类包含以下常量:
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是否可以在不丢失信息的情况下将值存储到可接受的程度。新的整数(字符串)可以工作吗?如果它抛出一个异常,你可以尝试另一种选择。一般来说,如果你坚持使用一种数字类型,你的生活肯定会简单得多。如果您有一个可以表示任意十进制数的字符串,请使用BigDecimal
,而不是尝试在int
、biginger
、long
、double
、BigDecimal
之间切换。尝试切换类型增加了复杂性,但实际上几乎从未带来有意义的好处。