iOS UInt64 数字浮点错误


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

输出结果是"float tt = 999999872",正如你所看到的UInt64转换为float失去一些东西,最大浮点数大于999999900,所以我认为999999900的值可以转换为浮点数,所以我的问题是为什么在iOS中失去28?

float的精度有限。它不是数字的大小,而是有效数字的数量(在本例中为 9)。

使用double而不是float以获得更高的精度。

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

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

通常,您永远不应该使用浮点数而不是双精度,除非您自己可以给出合理的解释,为什么浮点数比双精度更适合。

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

最新更新