IOS中奇怪的浮动问题

时间:2012-09-27 03:08:41

标签: iphone objective-c ios c

float abc = 145606035;
NSLog(@"%f", abc);
NSLog(@"%d", abc);


First NSLog = 145606032.000000 //this is wrong, please look at the last digit.
Second NSLog = 536870912 //this is wrong too!

为什么答案如此奇怪?是否有意义? 'abc'甚至没有超过Integer的最大数,为什么这个数字错了?无论如何要解决这个问题?

2 个答案:

答案 0 :(得分:6)

原因是因为它将abc的二进制表示解释为整数。二进制表示中的十进制数和整数是完全不同的,要获得正确的输出,您应该将abc转换为int (int)abc

由于浮点数的精度,第一个输出关闭。浮点数必须将其精度分解为数字的整个部分以及符号和尾随小数。这意味着浮点数的范围受到限制,尤其是使用32位浮点数。对于double类型,您应该获得第一个数字的正确输出。

答案 1 :(得分:0)

它总会给你这种答案。看看你的代码,在第一行你将浮点值赋给变量“ABC”,然后在第一个NSLOG中你要求给你浮点值(这个是正确的)。在第二个NSLOG中,你要求给你整数值(这个不对)。

希望它会对你有所帮助!