这是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;
}