以下是代码:
float passedPrice = 2.953;
float placed = 1000.0; //3 decimals
NSLog("%f", placed); // Gives 2953;
float withNoFractions = floorf(passedPrice * placed);
withNoFractions中存储的值是2952!它应该是2953.真正奇怪的是它有一段时间了。
答案 0 :(得分:8)
许多十进制浮点分数不能表示为二进制的精确分数,因此必须近似它们。 2.953的近似值类似于2.95299999。当你乘以1000时,结果是2952.99999,当你得到它的最低点时,它是2952。
要解决此问题,您可以使用round()
代替ffloorf()
,也可以在调用ffloorf()
之前添加0.5:
float withNoFractions = floorf(passedPrice * placed + 0.5);