将价格舍入到java

时间:2015-06-05 13:07:44

标签: java floating-point rounding

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

E.g。

38.82进入38.80
38.87进入38.90
38.85保持不变。 我做了例如。 1和E.g. 2但它只出现小数点后1位。例如。 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));
    }
}

我已经在本网站的专家看过其他模型答案,但没有一个真正回答我的问题。设置为2位小数,我使用DemicalFormat。我知道,但数字四舍五入,让我们说38.83到38.85和38.87到38.90是我真正想要的。这是我国正在使用的舍入系统。可以查看here

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

2 个答案:

答案 0 :(得分:3)

这样做的一种方法是将价格转换为美分,除以5,舍入为,再次乘以5并转换回美元:

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

答案 1 :(得分:2)

当你处理钱时,你应该避免使用float或double变量并使用整数数据类型,以避免由于浮点值或double值的计算不准确而导致的问题。

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

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