频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
浮点数计算精度有误,BigDecimal使用解决问题
2018-04-14 09:57:49      个评论    来源:就酱的博客  
收藏   我要投稿

在开发中我们常常不可避免的需要进行浮点数类型的计算,但是这里我们总会发现计算结果如果不自己进行精度处理,往往会出现问题。

为了解决这个问题,我们可以使用BigDecimal来进行计算。

这里整理了一些使用方法:

public class BigDecimalUtil {
    /**
     * BigDecimal的加法运算封装
     */
    public static BigDecimal safeAdd(BigDecimal b1, BigDecimal... bn) {
        if (null == b1) {
            b1 = BigDecimal.ZERO;
        }
        if (null != bn) {
            for (BigDecimal b : bn) {
                b1 = b1.add(null == b ? BigDecimal.ZERO : b);

            }
        }
        return b1;
    }

    /**
     * BigDecimal的安全减法运算
     */
    public static BigDecimal safeSubtract(BigDecimal b1, BigDecimal... bn) {
        if (null == b1) {
            b1 = BigDecimal.ZERO;
        }
        if (null != bn) {
            for (BigDecimal b : bn) {
                b1 = b1.subtract((null == b ? BigDecimal.ZERO : b));
            }
        }
        return b1;
    }

    /**
     * 金额除法计算,返回2位小数(具体的返回多少位大家自己看着改吧)
     */
    public static  BigDecimal safeDivide(T b1, T b2) {
        return safeDivide(b1, b2, BigDecimal.ZERO);
    }

    /**
     * BigDecimal的除法运算封装,如果除数或者被除数为0,返回默认值
     *

* 默认返回小数位后2位,用于金额计算 */ public static BigDecimal safeDivide(T b1, T b2, BigDecimal defaultValue) { if (null == b1 || null == b2) { return defaultValue; } try { return BigDecimal.valueOf(b1.doubleValue()).pide(BigDecimal.valueOf(b2.doubleValue()), 2, BigDecimal.ROUND_HALF_UP); } catch (Exception e) { return defaultValue; } } /** * BigDecimal的乘法运算封装 */ public static BigDecimal safeMultiply(T b1, T b2) { if (null == b1 || null == b2) { return BigDecimal.ZERO; } return BigDecimal.valueOf(b1.doubleValue()).multiply(BigDecimal.valueOf(b2.doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP); } public static String getShowMoney(BigDecimal money) { if (money == null) { return "0.00"; } return money.setScale(2, BigDecimal.ROUND_HALF_UP).toString(); } public static String getShowMoney(T money) { if (money == null) { return "0.00"; } return BigDecimal.valueOf(money.doubleValue()).setScale(2, BigDecimal.ROUND_HALF_UP).toString(); } }

点击复制链接 与好友分享!回本站首页
上一篇:Activity中的fragment加载webview 出现空白
下一篇:疑难杂症之复位重启解决方法
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站