浮动比较

时间:2013-04-03 15:16:33

标签: ios objective-c

我很尴尬地问这个,但我正在运行iOS 6.1,以下行返回False:

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

但是以下内容返回True:

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

为什么?

3 个答案:

答案 0 :(得分:1)

在比较之前浮动物被施加到双打。 f表示小数位数。您在更改小数位数时比较两个不同的数字

答案 1 :(得分:1)

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

在第二个中你要比较两个花车

答案 2 :(得分:0)

经过一番阅读后,我对其原因的理解如下:

•C将1.2之类的数字视为double,如果使用f修改为1.2f作为浮动 •系统内部既没有双精度也没有浮点数,精度为100% •浮点数的表示错误高于双打的表示错误

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