我不好意思问这个问题,但我运行的是 iOS 6.1,以下行返回 False:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1)
但以下返回 True:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1f)
为什么?
我不好意思问这个问题,但我运行的是 iOS 6.1,以下行返回 False:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1)
但以下返回 True:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.1f)
为什么?
在比较之前将浮点数转换为双精度数。f 表示小数位数。当您更改小数位数时,您正在比较两个不同的数字
在第一个 systemVersion 从 float 转换为 double ,其值取决于您使用多少位来表示它
在第二个中,您正在比较两个浮点数
经过相当多的阅读,我对其中的原因的理解如下:
• C 将像 1.2 这样的数字视为双精度数,如果使用 f 进行修改,例如 1.2f 作为浮点数 • 双精度数和浮点数都不能在系统内部以 100% 的准确度表示 • 浮点数的表示错误高于双精度数
因此,将浮点数与双精度数进行比较大多会导致误导性结果。对于非关键系统,比较 2 个浮点数就足够了。