Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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 当数字超过1234567891123456时,DecimalFormat解析双精度错误_Java - Fatal编程技术网

Java 当数字超过1234567891123456时,DecimalFormat解析双精度错误

Java 当数字超过1234567891123456时,DecimalFormat解析双精度错误,java,Java,当我试图将字符串12345678911234567解析为double时,得到了一个意外的结果。 我使用下面的代码 double convertedNum = 0; convertedNum = new DecimalFormat().parse(12345678911234567).doubleValue(); 转换结果为1.2345678911234568E16 但我希望它是1.2345678911234567E16,我也尝试使用BigDecimal进行转换,如下所示 double

当我试图将字符串12345678911234567解析为double时,得到了一个意外的结果。 我使用下面的代码

    double convertedNum = 0;
convertedNum = new DecimalFormat().parse(12345678911234567).doubleValue();
转换结果为1.2345678911234568E16 但我希望它是1.2345678911234567E16,我也尝试使用BigDecimal进行转换,如下所示

double convertedNum = 0;
BigDecimal bgNum = null;
bgNum = new BigDecimal(12345678911234567);
convertedNum = bgNum.doubleValue();
会得到同样的结果,我找不到是什么原因造成的。
有人能给我一些建议吗,谢谢。

我最好的建议是在
BigDecimal
constructor-like中用引号标出数字

new BigDecimal("12345678911234567");
带有
字符串
参数的
BigDecimal
构造函数可以处理任意大小的数字

并非所有的大数字都能正确存储在
双精度
中。似乎您试图表示的数字可能介于两个
double
值之间。但是
BigDecimal
肯定能够正确地表示它

更新


为了澄清我的最后一段,没有任何
double
等于
12345678911234567
。有一个
double
等于
12345678911234566
,但下一个
double
等于
12345678911234568
。因此,任何将
12345678911234567
存储在
double
中的尝试都将导致将
12345678911234568
四舍五入

我最好的建议是在
BigDecimal
类构造函数中的引号中添加数字

new BigDecimal("12345678911234567");
带有
字符串
参数的
BigDecimal
构造函数可以处理任意大小的数字

并非所有的大数字都能正确存储在
双精度
中。似乎您试图表示的数字可能介于两个
double
值之间。但是
BigDecimal
肯定能够正确地表示它

更新


为了澄清我的最后一段,没有任何
double
等于
12345678911234567
。有一个
double
等于
12345678911234566
,但下一个
double
等于
12345678911234568
。因此,任何将
12345678911234567
存储在
double
中的尝试都将导致将
12345678911234568
四舍五入

谢谢你的回复,但我必须以双字型储存。因此,我使用BigDecimal doubleValue()进行分析,但结果也是1.2345678911234568E16。@kingaffery我希望我的更新能够澄清为什么您所要求的是不可能的。谢谢您的回复,但我必须以双精度类型存储。因此,我使用BigDecimal doubleValue()进行解析,但结果也是1.2345678911234568E16。@kingaffery我希望我的更新能够澄清为什么您所要求的是不可能的。