根据最接近的小数值四舍五入 - java

Round according to nearest decimal value - java

我用过这个

Math.round(input * 100.0) / 100.0;

但它不符合我的要求。我想根据最接近的小数取整到两位小数。

首先我想检查小数点后第四位的值 如果它是 5 或以上,我想将 1 加到第三位十进制值中 然后想检查第三个 如果它是 5 或以上我想将 1 添加到第二个

例如:如果我有 22.3246

参考上面的示例编号。第四位小数是 6。 我们可以将 1 添加到第 3 个十进制值。

结果:22.325

现在第三位小数是5。我们可以将1加到第二位小数

结果:22.33

我想得到结果 22.33

如果你想尊重小数点后4位,可以这样做:

double val = Math.round(22.3246 * 1000.0) / 1000.0;
double result = Math.round(val * 100.0) / 100.0;
System.out.println(result); // print: 22.33

您可以使用 BigDecimal class 结合体重秤和 RoundingMode.HALF_UP 来完成这个任务。

示例代码:

System.out.println(new BigDecimal("22.3246").divide(BigDecimal.ONE,3,RoundingMode.HALF_UP)
                    .divide(BigDecimal.ONE,2,RoundingMode.HALF_UP));

输出:

22.33

根据您的要求,要舍入到22.32的最大数是22.3244444444...。从 22.32444...4445 开始,每个数字迭代舍入数字将导致 22.33.

因此,您可以添加 0.005 - 0.0044444444 的偏差(标准舍入阈值减去您的阈值),即 5/9000,然后按标准方式舍入到下一个 1/100

    double BIAS = 5.0 / 9000.0;
    double result = Math.round((input + BIAS) * 100.0) / 100.0;