欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java金额计算归整

程序员文章站 2024-02-11 21:29:04
...

背景

在项目开发中,经常遇到关于金额的计算,下单逻辑中,账务报表中等等一系列和金额相关的业务都会存在。当前的经济社会,最让人敏感的也莫过于这些金额数字,如果这些地方出问题,带来的后果可想而知。

君欲善其事必先利其器,作为一个开发人员,一定要经常性的创建与收集一些可靠的工具来帮助我们~

目的

分享与整理,望曾经在此处跌倒过的人共勉

方式

千里之堤溃于蚁泬,一个工具类的整理,虽然简单,确能保证系统中关于金额的准确性与有效性

直接上代码

    /**
     * 两个double类型的数值相加
     */
    public static double add(double v1, double v2) {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.add(b2).doubleValue();
    }

    /**
     * 两个String类型的数值相加
     */
    public static String add(String v1, String v2){
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.add(b2).toString();
    }

    /**
     * 相减
     */
    public static double sub(double v1, double v2) {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 相减
     */
    public static double sub(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.subtract(b2).doubleValue();
    }
    /**
     * 相乘,此处默认保留两位小数
     * 并使用四舍五入原则取值
     */
    public static double mul(double v1, double v2) {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    /**
     * 相除,此处默认保留两位小数
     * 并使用四舍五入原则取值
     */
    public static double div(double v1, double v2) {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    /**
     * 将dubbo类型转为string类型
     * 格式化金额,统一保留2位小数
     */
	public static String formatAmount(Double amount){
        NumberFormat nf = NumberFormat.getInstance();
        //设置最大保留小数位数
        nf.setMaximumFractionDigits(2);
        //取消','等计数方式
        nf.setGroupingUsed(false);
        return nf.format(amount);
    }

后话与注意

1、代码中对于金额的计算尽量避免使用+,-,*,/这些操作,要用上述工具方法进行替代

2、此处整理并非全面,每个人都有自己的使用习惯,在此只做提笔,不敢妄言指教

3、JDK官方已经不再建议使用new Bigdecimal(double v)这种方式的构造方法,尽量使用string类型传值

      而BigDecimal.valueOf(v1)的源码即:

java金额计算归整

因而都使用了此方式

4、文中若错误及不当之处,望指教与提醒,十分感激。

5、多整理,多总结,希望我们都能超神

相关标签: java开发 java