我有一个简单的例子来比较使用foat和NSDecimalNumber:
NSDecimalNumber *n1 = [[NSDecimalNumber alloc] initWithDouble:33.23];
NSDecimalNumber *n2 = [[NSDecimalNumber alloc] initWithDouble:78.35];
NSDecimalNumber *n3 = [n1 decimalNumberByDividingBy:n2];
NSLog(@"decimalNumber n3 %@", n3);
double d1 = 33.230000000000000;
double d2 = 78.350000000000000;
double d3 = d1/d2;
NSLog(@"double d3 %f", d3);
结果:
decimalNumber n3 0.42412252712188889444798978940650925335
double d3 0.424123
问题:
答案 0 :(得分:2)
我认为它更多的是NSLog
问题,而非四舍五入问题。
尝试记录[n3 doubleValue]
:
NSLog(@"decimalNumber n3 %f", [n3 doubleValue]);
答案 1 :(得分:2)
这是由于两种类型的精度,位数和基数之间的差异。 double
和float
内部使用基数为2且精度较低,NSDecimalNumber
使用基数10且精度更高。它类似于分数和小数,例如,1/3和0.333333333333333333不完全相同。在网络上有大量的答案和更广泛的答案,以及介绍性的CS教科书,这些都是更精细的细节。 HTH