UInt64 intValue = 999999900;
float tt = intValue;
NSLog(@"float tt = %f", tt);
输出结果是“float tt = 999999872”,因为你可以看到UInt64转换为float丢失的东西,Max float大于999999900,所以我认为值999999900可以转换为float,所以我的问题是为什么在iOS中输掉28?
答案 0 :(得分:1)
float
的精确度有限。它不是数字的大小,而是有效位数(在这种情况下为9)。
使用double
代替float
来获得更高的精确度。
UInt64 intValue = 999999900;
double tt = intValue;
NSLog(@"double tt = %f", tt);
答案 1 :(得分:0)
你为什么使用浮动而不是双倍?没有人告诉你,浮子的精度非常有限(大约7位数),而双倍大约有15位数?
作为一项规则,除非你自己能够给出一个合理的解释,为什么浮动比双重更合适,否则你不应该使用浮动而不是双重。
所以你的问题是:当我故意扔掉8位数字和精确度时,为什么我会失去精确度,我该怎么办?答案很简单:因为你把它扔掉了,你失去了精确度。使用double而不是float。