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

Abd*_*tou 2 math objective-c floor

这是代码:

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

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

Bar*_*mar 9

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

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

float withNoFractions = floorf(passedPrice * placed + 0.5);
Run Code Online (Sandbox Code Playgroud)