objective-c - 在 Objective-C 中将数字舍入到指定精度

标签 objective-c floating-point double precision rounding

我正在尝试使用四舍五入的半舍入方法将数字四舍五入到指定的精度。 (即 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/

相关文章:

ios - 无法设置从 iPhone 到 iPad 全屏的大小

c - IEEE 754 表示

arrays - 将 2D 矩阵的 2D 单元(大小一致)转换为 4D matlab double

Java 将值添加到现有值(int)

java - 如何证明我的 Double.toString 算法对于所有值都是正确的?

objective-c - 应用程序中的 iOS 内部代理

ios - 在一个窗口中嵌入多个 View Controller

iOS 6 map 未显示提供的经纬度位置

c - 禁用 SSE 的 SSE 寄存器返回

python - python 中 int(x) 的奇怪行为