0
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 的最大数,为什么数字是错误的?有任何解决这个问题的方法吗?

4

2 回答 2

6

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

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

于 2012-09-27T03:15:43.040 回答
0

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

希望对您有所帮助!

于 2012-09-27T03:14:28.647 回答