Java 当数字超过1234567891123456时,DecimalFormat解析双精度错误
当我试图将字符串12345678911234567解析为double时,得到了一个意外的结果。 我使用下面的代码Java 当数字超过1234567891123456时,DecimalFormat解析双精度错误,java,Java,当我试图将字符串12345678911234567解析为double时,得到了一个意外的结果。 我使用下面的代码 double convertedNum = 0; convertedNum = new DecimalFormat().parse(12345678911234567).doubleValue(); 转换结果为1.2345678911234568E16 但我希望它是1.2345678911234567E16,我也尝试使用BigDecimal进行转换,如下所示 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我希望我的更新能够澄清为什么您所要求的是不可能的。