我正在尝试使用四舍五入的半舍入方法将数字四舍五入到指定的精度。 (即 0.5 将是 1 舍入到一个人的精度)。我尝试了另一个 SO 问题的以下内容,但是它无法正确舍入:
//where x is number and precision is precision
int num = floor(log10(abs(x))) - precision + 1;
double temp = pow(10, num);
return floor(x / temp + 0.5) * temp;
示例:2.55 舍入为 2.5 而我需要它舍入为 2.6
我想知道是否有人有更好的方法将数字四舍五入到给定的精度。我已经尝试修改此方法但没有成功。
最佳答案
使用 NSDecimalNumber
以获得更高的精度。参见 NSRoundingMode
对于不同的舍入模式(我想你想要 NSRoundPlain
)
NSDecimalNumberHandler *rounder = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:precision raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *number;
NSDecimaNumber *rounded = [number decimalNumberByRoundingAccordingToBehavior:rounder];
参见 docs有关处理程序中的 BOOL
参数的更多信息。
对于您想要的东西来说,这似乎有点矫枉过正,但它确保您的数字很少会失去精度。
更改 scale
rounder
的参数用于结果的更多数字(即您的 precision
变量)。
关于objective-c - 在 Objective-C 中将数字舍入到指定精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23162255/