根据最接近的小数值四舍五入 - 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;
我用过这个
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;