2

这是代码:

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

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

4

1 回答 1

9

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

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

float withNoFractions = floorf(passedPrice * placed + 0.5);
于 2013-06-18T00:42:19.850 回答