iOS UInt64编号浮动错误

时间:2016-03-13 04:26:29

标签: ios objective-c uint64

UInt64 intValue = 999999900;
float tt = intValue;
NSLog(@"float tt = %f", tt);

输出结果是“float tt = 999999872”,因为你可以看到UInt64转换为float丢失的东西,Max float大于999999900,所以我认为值999999900可以转换为float,所以我的问题是为什么在iOS中输掉28?

2 个答案:

答案 0 :(得分:1)

float的精确度有限。它不是数字的大小,而是有效位数(在这种情况下为9)。

使用double代替float来获得更高的精确度。

UInt64 intValue = 999999900;
double tt = intValue;
NSLog(@"double tt = %f", tt);

答案 1 :(得分:0)

你为什么使用浮动而不是双倍?没有人告诉你,浮子的精度非常有限(大约7位数),而双倍大约有15位数?

作为一项规则,除非你自己能够给出一个合理的解释,为什么浮动比双重更合适,否则你不应该使用浮动而不是双重。

所以你的问题是:当我故意扔掉8位数字和精确度时,为什么我会失去精确度,我该怎么办?答案很简单:因为你把它扔掉了,你失去了精确度。使用double而不是float。