保留n位有效数字

保留n位有效数字/***保留n位有效数字*@paramnum*@return*/publicstaticDoubleroundToSignificantFigures(doublenum,intn){if(num==0){return

灵感来自
rounding to an arbitrary number of significant digits

保留n位有效数字

原理1:对一个数,求其以10为底的对数,可以很方便的知道他的位数。
如:Math.log10(12345.6) = 4.091512201627772
然后向上取整Math.ceil(4.091512201627772) = 5
可以得知12345.6的位数是5

原理2:Math.round() 可以帮助我们四舍五入。注意它针对第一个小数点。
我们可以将 12345.6 乘以修正因子 0.01 变成 123.456 ,这样就可以四舍五入了。
Math.round(123.456) = 123
最后除以修正因子0.01

    /** * 保留 n位有效数字 * @param num 需要保留的数字 * @param n 保留的有效数字位数 * @return Double */
    public static Double roundToSignificantFigures(double num, int n) { 
   
        if (num == 0) { 
   
            return 0.0;
        }
        //获取num是几位数
        double d = Math.ceil(Math.log10(num < 0 ? -num : num));
        //获取修正因子
        double magnitude = Math.pow(10, n - (int) d);
        long shifted = Math.round(num * magnitude);
        return shifted / magnitude;
    }

今天的文章保留n位有效数字分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/63631.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注