java基础之小数计算

作者: 躲在屋顶上的喵 | 来源:发表于2019-06-11 16:29 被阅读0次

    项目中会经常用到小数位的计算。很多人第一感觉会想尝试使用float或者double,然而在精准计算,例如金钱计算中,使用float或者double来计算会出现意想不到后果。

    如图所示:并没有得到预期的0.05。

    出现原因分析:Java在计算浮点数的时候,由于二进制无法精确表示0.1的值(就好比十进制无法精确表示1/3一样)。

    解决方案:2种

    1.先用整数加减乘除,再除以小数位。

    2.使用BigDecimal类进行金额及其他精确计算

            注意事项:

            (1)一定要用BigDecimal(String)构造器,而非其他,例如new BigDecimal(0.1),它将返回0.1000000000000000055511151231257827021181583404541015625 。

                    在计算的时候,应该先把数字转换成String类型的,才能得到最精确的值。

            (2)比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

            (3)附常用的方法:

                    add  加

                    subtract  减

                    multiply  乘

                    divide 除

                    abs 绝对值

                    getScale  取几位小数

                    pow  几次方

    相关文章

      网友评论

        本文标题:java基础之小数计算

        本文链接:https://www.haomeiwen.com/subject/gdmqfctx.html