特殊圆形十进制Java

时间:2014-03-05 18:55:37

标签: java decimal rounding

我正在寻找一个简单的java函数代码来舍入一些小数,

示例: 输入数字将始终采用此格式#。## 所以代码应该这样做:

输入100.00 结果100.00舍入0.00

输入100.01 结果100.00舍入-0.01

输入100.02 结果100.00舍入-0.02

输入100.03 结果100.05舍入+0.02

输入100.04 结果100.05舍入+0.01

我不确定是否有可以提供此结果的java函数。

2 个答案:

答案 0 :(得分:0)

要舍入到最接近的0.05,一种简单的方法是乘以20,舍入到最接近的整数,然后除以20。

100.00 * 20 = 2000.00    round-> 2000    2000/20 = 100.00
100.02 * 20 = 2000.20    round-> 2000    2000/20 = 100.00
100.04 * 20 = 2000.80    round-> 2001    2001/20 = 100.05
100.06 * 20 = 2001.20    round-> 2001    etc
100.07 * 20 = 2001.40    round-> 2001 
100.08 * 20 = 2001.60    round-> 2002

您必须决定100.025会发生什么,这将决定您是使用ROUND_HALF_UP,ROUND_HALF_DOWN还是ROUND_HALF_EVEN。

答案 1 :(得分:0)

我知道这不是Java方法。但为什么不使用模数? :)

public static void main(String[] args) {
    for (float number = 0; number<1; number+=0.01f){
        float rounded = round(number);
        System.out.printf("%f -> %.2f\n", number, rounded);
    }
}

public static float round(float number){
    float ret;

    float mod = number % 0.05f;


    if (mod < 0.05f / 2 ){
        ret = number - mod;
    }else{
        ret = number + (0.05f - mod);
    }

    return(ret);
}

输出

0.000000 -> 0.00
0.010000 -> 0.00
0.020000 -> 0.00
0.030000 -> 0.05
0.040000 -> 0.05
0.050000 -> 0.05
0.060000 -> 0.05
0.070000 -> 0.05
0.080000 -> 0.10
0.090000 -> 0.10
0.100000 -> 0.10
0.110000 -> 0.10
0.120000 -> 0.10
0.130000 -> 0.15
0.140000 -> 0.15
0.150000 -> 0.15
0.160000 -> 0.15
0.170000 -> 0.15
0.180000 -> 0.20
0.190000 -> 0.20
0.200000 -> 0.20
0.210000 -> 0.20
0.220000 -> 0.20
0.230000 -> 0.25
0.240000 -> 0.25
0.250000 -> 0.25
0.260000 -> 0.25
0.270000 -> 0.25
...

我没有在你的问题中看到任何负面价值。所以我想这就够了: - )