四舍五入到任意有效数字位数
如何将 任意 数字(不仅是整数> 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