四舍五入到任意有效数字位数

如何将 任意 数字(不仅是整数> 0)舍入为N个有效数字?

例如,如果我想四舍五入到三个有效数字,那么我正在寻找一个可能采用的公式:

1,239,451,回报1,240,000

12.1257并​​返回12.1

.0681并返回.0681

5并返回5

自然,不应将算法硬编码为仅处理3的N,尽管这只是一个开始。

回答:

这是Java中的相同代码,没有12.100000000000001错误,其他答案也有

我还删除了重复的代码,更改power为整数类型以防止n - d完成操作时出现浮动问题,并使长中间体更加清晰

该错误是由大量乘以少量引起的。相反,我将两个相似大小的数字相除。

修正了更多的错误。添加了对0的检查,因为这将导致NaN。使函数实际使用负数(原始代码不处理负数,因为负数的对数是复数)

public static double roundToSignificantFigures(double num, int n) {

if(num == 0) {

return 0;

}

final double d = Math.ceil(Math.log10(num < 0 ? -num: num));

final int power = n - (int) d;

final double magnitude = Math.pow(10, power);

final long shifted = Math.round(num*magnitude);

return shifted/magnitude;

}

以上是 四舍五入到任意有效数字位数 的全部内容, 来源链接: utcz.com/qa/401781.html

回到顶部