使用0.5规则舍入浮点数的方法

时间:2011-07-25 01:12:10

标签: objective-c c floating-point rounding

我不能用普通的0.5规则来实现对浮点的舍入 让我们准确一下......我怎么能做出这样的回合:

  • x.x2 - > x.x中
  • x.x5 - > x.x(或x.x + 1也不错)
  • x.x6 - > x.x中+ 1

例如:

  • 1.12 - > 1.1
  • 1.22 - > 1.2

  • 1.15 - > 1.1(或1.2也好)

  • 1.25 - > 1.2(或1.3也好)

  • 1.16 - > 1.2

  • 1.26 - > 1.3

我尝试了这些方法(可能是以错误的方式):

  • NSNumberFormatter
  • NSDecimalNumber
  • ...

但没有什么可以给出这个结果。我总是得到一些x.x99999999的结果,或者是非常圆润的结果(太高,低,或者当数字应该在上面的数字上时偶数)。

2 个答案:

答案 0 :(得分:7)

试试这个:

round(x * 10.0f) / 10.0f

答案 1 :(得分:0)

为了避免在@junjanes的好答案中出现溢出,只有在x有小数部分时才操纵{/ 1}}。

float round_tenth(float x) {

  const float limit = 1.0/FLT_EPSILON;
  // or limit = FLT_MAX/10.0;

  if (fabsf(x) < limit) {
    return roundf(x*10.0f)/10.0f;
  }
  return x;
}