gpt4 book ai didi

java - BigDecimal 到 double 的转换

转载 作者:行者123 更新时间:2023-11-30 03:30:50 25 4
gpt4 key购买 nike

将 BigDecimal 转换为 double 时,会添加额外的精度。你能建议这个吗?例如:

BigDecimal deci= new BigDecimal(1.23456789123457E+17);
double value = deci.doubleValue();
System.out.println(value);

并且值打印- 1.23456789123456992E17。为什么最后一个数字 7 会转换为 6992?有什么方法可以获得转换为 double 后传递给 BigDecimal 的相同输入吗?

最佳答案

有一些有用的方法 Math.nextUp()Math.nextDown() 可以帮助您调查此问题:

BigDecimal deci= new BigDecimal(1.23456789123457E+17);
double value = deci.doubleValue();
System.out.println(value);
System.out.println(Math.nextDown(value));
System.out.println(Math.nextUp(value));

输出为:

1.23456789123456992E17
1.23456789123456976E17
1.23456789123457008E17

如您所见,双数 ...456976 后面紧跟着 ...456992,而 ...456992 后面紧接着是 。 ..457008。因此,BigDecimal.doubleValue() 应在两个最接近的数字 ...456992...457008 之间进行选择。他们之间不存在其他双数。

实际上,您甚至不需要 BigDecimal 来进行此测试:

double value = 1.23456789123457E+17;
System.out.println(value); // prints 1.23456789123456992E17

关于java - BigDecimal 到 double 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com