【问题标题】:Round to the next higher number四舍五入到下一个更高的数字
【发布时间】:2011-10-13 12:47:21
【问题描述】:

我想将一个值(double)四舍五入到下一个(总是向上取整)数字。可以用任意数字定义舍入。

经验:
向上舍入到下一个 2.50

0.00       --> 0.00
0.01       --> 2.50
2.49       --> 2.50
2.50       --> 2.50
2.50000001 --> 5.00
...

执行此操作的算法很简单(如果“数字”为负数 * -1):

Math.Round((Math.Abs(number) + tolerance) / 2.50, MidpointRounding.AwayFromZero) * 2.50

公差定义如下:

tolerance = 2.50 / 2 - Math.Pos(10, -x);

但我不知道如何确定 x!因为在第 1-4 个例子的情况下 x 应该是 0.01 在第 5 个例子的情况下它应该是 0.0000001 等等......

搜索结果只建议解析十进制数的字符串并计算十进制数。没有数学方法吗?否则,我必须对十进制分隔符和没有十进制数字的数字(没有要删除的十进制分隔符)使用不同的语言环境设置。

愿任何人都可以解决我的问题。谢谢!

亲切的问候,丹尼

【问题讨论】:

    标签: c# math rounding


    【解决方案1】:

    Math.Ceiling(v / 2.5) * 2.5 怎么样?

    【讨论】:

    • 太简单了;)谢谢!
    【解决方案2】:

    你需要Math.Ceiling

    这需要一个双精度数并将它向上四舍五入到最接近的整数,除非该值已经等于一个整数。但是,它返回的数据类型仍然是 double。

    使用示例...

    Double testValue = 1.52;
    Console.WriteLine(Math.Ceiling(testValue));
    

    ...将打印2

    【讨论】:

    • 好东西 :) 这个答案出现在低质量审核队列中,因为它只是一个链接答案,您的编辑现在应该将它从队列中剔除。
    【解决方案3】:

    Math.Ceiling 完全满足您的需求。

    【讨论】:

      【解决方案4】:

      您可以为此使用 Math.Ceiling

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 2014-08-20
        • 1970-01-01
        相关资源
        最近更新 更多