有没有一种很好的方法来获取Objective-C中双变量的小数位数? 我挣扎了一段时间才找到方法但没有成功。
例如231.44232000应返回5.
提前致谢。
答案 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。您可以创建自己的子类并添加存储和跟踪有效数字的功能。