【问题标题】:Special Round Decimal Java [duplicate]特殊圆形十进制Java [重复]
【发布时间】:2014-03-05 18:55:36
【问题描述】:

我正在寻找一个简单的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 函数可以提供这个结果。

【问题讨论】:

  • 不是重复,OP 想要四舍五入到最接近的 1/20 (.05),这不是标准舍入。
  • 你描述的函数不是四舍五入的。这是另一回事。
  • 最简单的方法(不一定是最好或最快的)是乘以 20,四舍五入到最接近的整数,然后除以 20。

标签: java decimal rounding


【解决方案1】:

要四舍五入到最接近的 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。

【讨论】:

    【解决方案2】:

    我知道这不是 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
    ...
    

    我在您的问题中没有看到任何负值。所以我想这已经足够了:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2013-06-13
      相关资源
      最近更新 更多