关于BigDecimal 的使用

来源:互联网 发布:免费域名注册网站 编辑:程序博客网 时间:2024/05/17 02:44

        对于Java 来说,对于float与double的计算都是不准确的(来自于《effect in java 》),所以对于很多系统中钱的计算要非常小心,我们在计算钱时,要么把钱的单位由元变为分,这样就把钱的计算便成为int的计算,这个是准确的,但是也可用用BigDecimal来实现浮点数精确计算:

      介绍一下BigDecimal下的各种方法:

      add(BigDecimal add )加法,subtract(BigDecimal substract ) 为减法,devite(BigDecimal devite)为除法,multiply(BigDecimal multiply)为乘法。

    这样基本的四则运算就完了,对于除法有时候结果出现除不尽,会报no exact representable decimal result.这个异常,这个问题如何解决?

    对于devite()有个重构的方法:divide(BigDecimal divisor, int roundingMode),第二个参数是对除不尽的情况的处理:

     roundingMode有以下这些:

    static int   ROUND_CEILING     向正无穷方向舍入
    static int   ROUND_DOWN        向零方向舍入
    static int   ROUND_FLOOR       向负无穷方向舍入
    static int   ROUND_HALF_DOWN   向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
    static int   ROUND_HALF_EVEN   向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用                                                                    ROUND_HALF_DOWN
     static int   ROUND_HALF_UP     向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
     static int   ROUND_UNNECESSARY 计算结果是精确的,不需要舍入模式
     static int   ROUND_UP          向远离0的方向舍入

0 0