【问题标题】:Rounding up double numbers in Objective-C在 Objective-C 中舍入双数
【发布时间】:2011-08-23 23:38:47
【问题描述】:

我需要 C 代码来将双精度值四舍五入到下一个最大整数值。

例如,如果我有:

1.0 (double)一定是1 (int)
1.01 (double)一定是2 (int)
5.67 (double)一定是6 (int)
76.43 (double)一定是77 (int)

有解决办法吗?

【问题讨论】:

标签: objective-c c double int rounding


【解决方案1】:

使用<math.h> 中的ceil() 函数:

#include <math.h>

double x = 1.01;     // x = 1.01
double y = ceil(x);  // y = 2.0
int i = (int)y;      // i = 2

或者更简洁,如果你只想要 int 结果:

int i = (int)ceil(x);

【讨论】:

  • 您可能需要在转换为 int 之前检查结果的范围,否则转换会调用未定义的行为。
  • @R.: true - 为简单起见,我假设已知结果在int 的范围内,但在更一般的情况下,我们需要在转换之前执行范围检查.
【解决方案2】:

假设您的浮点数是nr。 没有内置函数:

float nr;
int temp;
if (nr % 10 > 0) {
    temp = nr++;
} else {
    temp = nr;
}
nr = temp;

【讨论】:

  • 除了不必要的赋值(nr++?)、隐式转换和冗长之外,代码中还有一个错误:nr % 10 应该是nr % 1
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 2011-06-09
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多