Objective-C:floorf()返回错误的值

时间:2013-06-18 00:28:07

标签: objective-c math floor

以下是代码:

    float passedPrice = 2.953;
    float placed = 1000.0; //3 decimals
    NSLog("%f", placed); // Gives 2953;
    float withNoFractions = floorf(passedPrice * placed);

withNoFractions中存储的值是2952!它应该是2953.真正奇怪的是它有一段时间了。

1 个答案:

答案 0 :(得分:8)

许多十进制浮点分数不能表示为二进制的精确分数,因此必须近似它们。 2.953的近似值类似于2.95299999。当你乘以1000时,结果是2952.99999,当你得到它的最低点时,它是2952。

要解决此问题,您可以使用round()代替ffloorf(),也可以在调用ffloorf()之前添加0.5:

float withNoFractions = floorf(passedPrice * placed + 0.5);