在 java 中将价格四舍五入到最接近的 5cent 的倍数

Rounding price to the nearest multiple of 5cent in java

我是 java 编程新手。我想将价格四舍五入到最接近的小数点后两位。

例如

38.82 变成 38.80
38.87 变成 38.90
38.85 保持不变。 我做了例如1 和例如2 但结果只有小数点后一位。例如。 38.82 到 38.8

这是我的代码:

import java.text.DecimalFormat;

public class RoundUp {

    public static void main(String[] args){
        DecimalFormat df = new DecimalFormat("#.##");
        double num = 38.84;
        System.out.println(df.format(Math.round(num*10.00)/10.00));
    }
}

我已经研究过该网络中专家的其他模型答案,但 none 确实回答了我的问题。设置为小数点后两位,我使用的是 DemicalFormat。我知道,但四舍五入,假设 38.83 到 38.85 和 38.87 到 38.90 是我真正想要的。这是我国正在使用的舍入系统。可以看看here.

请大家.. 请不要将我的问题更改为重复问题。您认为它是重复的,请向我询问更多信息。我可以向您保证它不是重复的(我认为...)

一种方法是将价格转换为美分,除以 5,四舍五入,再次乘以 5,然后转换回美元:

double rounded = Math.round(num * 100.0 / 5.0) * 5.0 / 100.0; 

在处理金钱时,应避免使用 float 或 double 变量,而应使用整数数据类型,以避免因 float 或 double 值的计算不准确而出现问题。

您可以使用以下解决方案(处理 int 时):

public static int roundUp(int cents) {
    int centsMod5 = cents%5;
    if (centsMod5 > 0) {
        cents += (5 - centsMod5);
    }
    return cents;
}