您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

这是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;
}
其他 2022/1/1 18:13:49 有434人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶