代码之家  ›  专栏  ›  技术社区  ›  Prashant Cholachagudda

如何将十进制值四舍五入到最接近的0.05?

  •  15
  • Prashant Cholachagudda  · 技术社区  · 15 年前

    在.Net中,有没有办法将十进制值四舍五入到最接近的0.05?

    前任:

    7.125->7.15

    如果现在可用,有人能给我提供算法吗?

    5 回复  |  直到 15 年前
        1
  •  32
  •   Massimiliano Peluso    12 年前

    怎么样:

    Math.Ceiling(myValue * 20) / 20
    
        2
  •  12
  •   Community CDub    8 年前

    使用以下命令:

    Math.Round(mydecimal / 0.05m, 0) * 0.05m;
    

    T-SQL中也可以使用相同的逻辑:

    ROUND(@mydecimal / 0.05, 0) * 0.05
    

    我更喜欢这种方法,而不是 selected answer

        3
  •  7
  •   Andriy Volkov    11 年前

    类似的内容应该适用于任何步骤,而不仅仅是0.05:

    private decimal RoundUp (decimal value, decimal step)
    {
        var multiplicand = Math.Ceiling (value / step);
        return step * multiplicand;
    }
    
        4
  •  2
  •   Fredou    15 年前

    Math..::.Round Method (Decimal, Int32, MidpointRounding)

       Math.Round(1.489,2,MidpointRounding.AwayFromZero)
    
        5
  •  1
  •   Community CDub    8 年前

    复制 here here 用于ruby和python。不应该有太大的不同。

        6
  •  0
  •   Tejasvi Hegde    5 年前

    我无法在大多数公式中得到适当的四舍五入

    float roundFloat(float value, float toNearest) {
                float divVal = (1 / (toNearest == 0 ? 1 : toNearest));
                return ((float)(Math.Round(value * divVal)) / divVal);
            }
    

    结果:

    roundFloat(2, 0.125F); -> 2
    roundFloat(2.11, 0.125F); -> 2.125
    roundFloat(2.22, 0.125F); -> 2.25
    roundFloat(2.33, 0.125F); -> 2.375
    roundFloat(2.44, 0.125F); -> 2.5
    roundFloat(2.549999, 0.125F); -> 2.5
    roundFloat(2.659999, 0.125F); -> 2.625
    roundFloat(2.769999, 0.125F); -> 2.75
    roundFloat(2.879999, 0.125F); -> 2.875
    roundFloat(2.989999, 0.125F); -> 3
    

    示例0.125最近舍入

     2.000 
     2.125 
     2.250 
     2.375 
     2.500 
     2.625 
     2.750 
     2.875 
     3.000