为什么Float错误在C中有所不同?

时间:2017-11-17 09:16:11

标签: objective-c c floating-point precision

请看图片:

enter image description here enter image description here

我很惊讶结果不同。

2 个答案:

答案 0 :(得分:6)

{64}平台上CGFloat实际上是double。 (在旧的32位平台上是float。)

所以在这里你将double除以double

CGFloat price    =    88888736      /     a;
        ^^^^^         ^^^^^^^^            ^
       double        int -> double      double

此处您将double除以float

CGFloat price2    =   88888736     /   100.0f;
        ^^^^^^        ^^^^^^^^         ^^^^^^
        double       int -> double      float

100.0f更改为100.0(CGFloat)100,您应该没问题。

LIVE DEMO

答案 1 :(得分:2)

CGFloat在您的计算机上是double,因此您正在做的是:

double a = 100.00f
double price = 88888736 / a

float a2 = 100.00f // `float` type enforced by the trailing `f`
double price2 = 88888736 / a2

不同之处在于,在第一种情况下,除法是double除法,而在第二种情况下,这是float除法,其中结果是然后分配给double。由于float除法精度较低,因此可以得到您所看到的结果。