Objective-C - 获取double变量的小数位数

时间:2011-11-28 00:50:05

标签: objective-c xcode double decimal

有没有一种很好的方法来获取Objective-C中双变量的小数位数? 我挣扎了一段时间才找到方法但没有成功。

例如231.44232000应返回5.

提前致谢。

2 个答案:

答案 0 :(得分:3)

你可以在一个循环中乘以10直到小数部分(由modf()返回)真的接近于零。迭代次数将是您所追求的答案。类似的东西:

int countDigits(double num) {
  int rv = 0;
  const double insignificantDigit = 8;
  double intpart, fracpart;
  fracpart = modf(num, &intpart);
  while ((fabs(fracpart) > 0.000000001f) && (rv < insignificantDigit)) {
    num *= 10;
    rv++;
    fracpart = modf(num, &intpart);
  }

  return rv;
}

答案 1 :(得分:1)

  

在Objective-C中有一个很好的方法来获取双变量的小数位数吗?

没有。对于初学者来说,double以二进制形式存储一个数字,因此甚至可能没有与您的十进制数相对应的精确二进制表示。也没有考虑有效小数位数 - 如果这很重要,你需要单独跟踪它。

如果需要存储十进制数的精确表示,您可能需要查看使用NSDecimalNumber。您可以创建自己的子类并添加存储和跟踪有效数字的功能。