【问题标题】:Round up or down向上或向下舍入
【发布时间】:2011-08-21 19:29:02
【问题描述】:

我有一个浮点数,我想向上或向下舍入到最接近的整数。

例如:

1.4 = 1.0 1.77 = 2.0 1.1 = 1.0

等等……

我在 Objective C 中做这个,所以我想我需要一个标准的数学函数...附近的 intf 会做吗?

【问题讨论】:

标签: iphone objective-c ios math


【解决方案1】:

您可以使用math.h 中定义的任何标准 C 库数学函数。 nearbyintf 会起作用,roundfceilffloorf 也会起作用,这取决于你想要什么。

如果您在编辑器中选择并双击它们,Xcode 将显示这些函数的文档(UNIX 手册页)。

【讨论】:

    【解决方案2】:

    使用

    double a = 2.3;
    double b = round(a);
    

    您可以在 math.h 中找到圆形和其他数学函数

    【讨论】:

      【解决方案3】:

      每当四舍五入时,请考虑是否可能出现负数。如果是这样,传统的 int (int) (x + 0.5) 可能无法满足您的要求,而 round 函数可能会更好。例如,round (-1.5) = 2。

      【讨论】:

        【解决方案4】:

        舍入很容易实现,因为将值转换为int 会截断数字的小数部分。让0 <= x < 1。然后,如果您希望所有值在小数部分小于x时向下舍入到最接近的整数,如果小数部分大于或等于x,则要向上舍入到最接近的整数,那么您只需计算:

        int roundedValueBasedOnX = (int) (value + (1 - x));
        

        例如,如果x = 0.2,那么我们有:

        1) value = 9.4,应四舍五入为10

        int roundedValueBasedOnX = (int) (9.4 + (1 - 0.2)) = (int) (9.4 + 0.8) = (int) (10.2) = 10;
        

        2) value = 3.1,应四舍五入为3

        int roundedValueBasedOnX = (int) (3.1 + (1 - 0.2)) = (int) (3.1 + 0.8) = (int) (3.9) = 3;
        

        如果x = 0.7,那么我们有:

        3) value = 9.4,应四舍五入为9

        int roundedValueBasedOnX = (int) (9.4 + (1 - 0.7)) = (int) (9.4 + 0.3) = (int) (9.7) = 9;
        

        4) value = 3.8,应四舍五入为4

        int roundedValueBasedOnX = (int) (3.8 + (1 - 0.7)) = (int) (3.8 + 0.3) = (int) (4.1) = 4;
        

        希望有帮助!

        【讨论】:

          【解决方案5】:

          老式的方法是在数字上加 0.5,然后让它截断:

          int x = (int) (someFloat + 0.5);
          

          【讨论】:

          • 您的解决方案没有考虑负数(如果有,您基本上就是在重写roundf 函数)。
          猜你喜欢
          • 2012-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-21
          相关资源
          最近更新 更多