首页 > 解决方案 > 四舍五入到最接近的小数?BigDecimal 与替代形式

问题描述

我有以下公式和代码:

我尝试了 Math.Floor 和其他人,但我没有得到预期的结果

double netPay = grossPay - totalDeduction;

System.out.printf("Net Pay: $%.2f", (netPay));

想法是按如下方式获取数字:

46.225

四舍五入为 46.22

而不是 46.23

标签: java

解决方案


正如评论者所说:出于财务目的,请使用 BigDecimal。

除此之外:

double netPayCents = Math.floor(netPay * 100);
netPay = netPayCents / 100d;

为什么使用 BigDecimal?

浮点值(包括双精度值)可能非常精确,但在尝试绝对精确时会出现问题。在大多数数学运算之后,它们总是要进行四舍五入。

有关更多详细信息,请参阅此线程:Double vs. BigDecimal?


推荐阅读