gpt4 book ai didi

java - 无法理解四舍五入如何处理十进制数字 (Java)

转载 作者:行者123 更新时间:2023-11-29 05:39:21 24 4
gpt4 key购买 nike

在处理一个实现时,我看到 2 个地方显示的数量不同。在进行更多调试时,我发现了此信息。

我有 2 个小数值,并且都四舍五入到 2 个小数位。

double value =1091.225;
double value1 =48.125;

System.out.println((double)Math.round(value * 100) / 100);
System.out.println((double)Math.round(value1 * 100) / 100);


BigDecimal price = new BigDecimal(value);
price = price.setScale(2, RoundingMode.UP);
double val= ((long) (value < 0 ? value * 100 - 0.5 : value * 100 + 0.5)) / 100.0;


BigDecimal price1 = new BigDecimal(value1);
price1 = price1.setScale(2, RoundingMode.UP);
double val1= ((long) (value1 < 0 ? value1 * 100 - 0.5 : value1 * 100 + 0.5)) / 100.0;

System.out.println(val);
System.out.println(val1);

这些是结果

1091.22
48.13
1091.22
48.13

但是,如果我将值更改为

double value =1091.255;
double value1 =48.125;

结果不同

1091.26
48.13
1091.26
48.13

谁能帮我理解为什么会这样?

最佳答案

这是因为 float 在内存中的存储方式。值 1091.2251091.255d 没有精确的二进制表示。尝试使用以下语句打印它们的值:

System.out.println(new BigDecimal(1091.225d));
System.out.println(new BigDecimal(1091.255d));

输出将是:

1091.22499999999990905052982270717620849609375
1091.2550000000001091393642127513885498046875

很明显,第一个将四舍五入为.22,第二个将四舍五入为.26

关于java - 无法理解四舍五入如何处理十进制数字 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231698/

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