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.真正奇怪的是它有一段时间了.
许多十进制浮点分数不能表示为二进制的精确分数,因此必须近似它们.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)