我想要做的很简单但结果却出现了错误:
float x = 423.36;
NSLog(@"%f", x);
NSLog(@"%.2f", x*17719);
结果:
2012-11-12 11:19:02.096 test[2917:907] 423.359985
2012-11-12 11:19:02.098 test[2917:907] 7501515.50
使用计算器计算时,我得到:7501515.84,这就是我想在我的应用程序中获得的内容。
有什么想法吗? 提前致谢! 罗伊。
答案 0 :(得分:3)
小数更改是因为float
类型无法准确表示任意数字。浮点数中有一定数量的精度可用,您需要小心正是你发现的原因:这些数字可以在没有警告的情况下改变你。
这不是一个真正的问题,但我会尽我所能:我认为你想要做的是找到一种方法来表示任意(或至少更高)的精确十进制数做你的数学。幸运的是,iOS SDK有一个答案:NSDecimalNumber class,它可以让您处理任何可以表示为mantissa * 10 ^ exp
的号码,其中mantissa
长达38位。仔细查看该类引用,看看是否可以移植现有的数学来使用它。
当你在这里时,这是阅读The Floating Point Guide的绝佳时机,它会处理你发现的问题。
答案 1 :(得分:2)
不要使用花车,因为它们对每个人都是精确的。使用双打