Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何判断表示为字符串的十进制数是否适合双精度?_Java_Types_Casting_Double_Bigdecimal - Fatal编程技术网

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

Java 如何判断表示为字符串的十进制数是否适合双精度?,java,types,casting,double,bigdecimal,Java,Types,Casting,Double,Bigdecimal,我正在解析一个字符串值,我知道它包含一个数字 如果它只包含数字,并且介于Integer.MIN_值和Integer.MAX_值之间,我将把它解析为int,否则我将使用biginger 如果它包含一个十进制值,我想将其解析为double或BigDecimal 我是否可以测试字符串中的数值是否“适合”到一个double中,因此可以安全地解析为double,或者是否需要将其保存在BigDecimal中以防止精度损失 因此,是否可以安全地将其解析为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
之间切换。尝试切换类型增加了复杂性,但实际上几乎从未带来有意义的好处。