我用过这个
Math.round(input * 100.0) / 100.0;但它不能满足我的需求。我想根据最接近的小数点取整成两个小数点。
首先我想检查第四个十进制值,如果它是5或以上,我想把1加到第三个十进制值,然后想检查第三个,如果它是5或以上,我想把1加到第二个
例如:如果我有22.3246
请参考上面的示例编号。第四个十进制数是6。我们可以在第三个十进制值中加上1。
结果: 22.325
现在第三个十进制数是5。我们可以在第二个十进制数中加1。
结果: 22.33
我想要得到22.33的结果
发布于 2021-01-06 17:53:39
如果你想尊重第四位小数,你可以这样做:
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发布于 2021-01-06 18:00:03
您可以结合使用scale和RoundingMode.HALF_UP使用BigDecimal类来完成此任务。
示例代码:
System.out.println(new BigDecimal("22.3246").divide(BigDecimal.ONE,3,RoundingMode.HALF_UP)
.divide(BigDecimal.ONE,2,RoundingMode.HALF_UP));输出:
22.33发布于 2021-01-07 18:56:51
根据您的要求,要向下舍入到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;https://stackoverflow.com/questions/65593183
复制相似问题