java

jckbn6z7  于 2021-06-26  发布在  Java
关注(0)|答案(3)|浏览(274)

我用过这个

Math.round(input * 100.0) / 100.0;

但这不符合我的要求。我想根据最接近的小数点值四舍五入到两个小数点。
首先我想检查第四个十进制值,如果是5或以上,我想把1加到第三个十进制值,然后我想检查第三个十进制值,如果是5或以上,我想把1加到第二个十进制值
例:如果我有22.3246
请参阅上面的示例编号。第四位小数是6。我们可以在小数点后三位加1。
结果:22.325
现在小数点后三位是5。我们可以把1加到第二个小数位
结果:22.33
我想得到结果22.33

w46czmvw

w46czmvw1#

如果您想尊重第四位小数,可以这样做:

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
bq8i3lrv

bq8i3lrv2#

你可以用 BigDecimal 类来完成这个任务,结合规模和 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
8ulbf1ek

8ulbf1ek3#

根据您的要求,最大的数字要四舍五入到 22.3222.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;

相关问题