4

我不好意思问这个问题,但我运行的是 iOS 6.1,以下行返回 False:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1)

但以下返回 True:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1f)

为什么?

4

3 回答 3

1

在比较之前将浮点数转换为双精度数。f 表示小数位数。当您更改小数位数时,您正在比较两个不同的数字

于 2013-04-03T15:24:51.213 回答
1

在第一个 systemVersion 从 float 转换为 double ,其值取决于您使用多少位来表示它

在第二个中,您正在比较两个浮点数

于 2013-04-03T15:25:53.797 回答
0

经过相当多的阅读,我对其中的原因的理解如下:

• C 将像 1.2 这样的数字视为双精度数,如果使用 f 进行修改,例如 1.2f 作为浮点数 • 双精度数和浮点数都不能在系统内部以 100% 的准确度表示 • 浮点数的表示错误高于双精度数

因此,将浮点数与双精度数进行比较大多会导致误导性结果。对于非关键系统,比较 2 个浮点数就足够了。

于 2013-04-04T14:24:49.823 回答