我需要将在 double
中执行的计算结果转换,但我不能使用 decimalNumberByMultiplyingBy
或任何其他 NSDecimalNumber
函数。我尝试了以下几种方式来获得准确的结果:
double calc1 = 23.5 * 45.6 * 52.7; // <-- Correct answer is 56473.32
NSLog(@"calc1 = %.20f", calc1);
-> calc1 = 56473.32000000000698491931
NSDecimalNumber *calcDN = (NSDecimalNumber *)[NSDecimalNumber numberWithDouble:calc1];
NSLog(@"calcDN = %@", [calcDN stringValue]);
-> calcDN = 56473.32000000001024
NSDecimalNumber *testDN = [[[NSDecimalNumber decimalNumberWithString:@"23.5"] decimalNumberByMultiplyingBy:[NSDecimalNumber decimalNumberWithString:@"45.6"]] decimalNumberByMultiplyingBy:[NSDecimalNumber decimalNumberWithString:@"52.7"]];
NSLog(@"testDN = %@", [testDN stringValue]);
-> 测试DN = 56473.32
我知道这个差异与各自的精度有关。
但是我的问题是:无论double
的初始值是什么,如何以最准确的方式将此数字四舍五入?如果存在更准确的方法来进行初始计算,那么是什么方法?
math.h
中的函数或Accelerate框架会帮助你?请参阅https://developer.apple.com/library/ios/documentation/Accelerate/Reference/AccelerateFWRef/_index.html。 - siejkowskimath.h
来完成那个。我的意思是说,如果不是被迫这样做,我会避免使用double
。(我不知道我是否表达清楚,因为我的英语非常不完美,也达到了准确度的极限;-) 抱歉!) - Croises