zoukankan      html  css  js  c++  java
  • NumberUtils BigDecimal 对应的加减乘除、格式化等方法

    View Code
    import java.math.BigDecimal;
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    
    /**BigDecimal 对应的加减乘除、格式化等方法<br />
     * 
     * @author EX-CHENWEIXIAN001
     *2012-11-8
     */
    public class NumberUtils {
    
        /**
         * 默认返回小数2位
         */
        public static final int DEFAULT_SCALE = 2;
        
        /**
         * 提供精确的加法运算。
         * 
         * @param v1 被加数
         * @param v2 加数
         * @return 两个参数的和
         */
        public static BigDecimal add(BigDecimal b1, BigDecimal b2) {
            return b1.add(b2);
        }
    
        /**
         * 提供精确的减法运算。
         * 
         * @param v1 被减数
         * @param v2 减数
         * @return 两个参数的差
         */
        public static BigDecimal sub(BigDecimal b1, BigDecimal b2) {
            return b1.subtract(b2);
        }
    
        /**
         * 提供精确的乘法运算。
         * 
         * @param v1 被乘数
         * @param v2 乘数
         * @return 两个参数的积
         */
        public static BigDecimal mul(BigDecimal b1, BigDecimal b2) {
            return b1.multiply(b2);
        }
    
        /**
         * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
         * 
         * @param v1 被除数
         * @param v2 除数
         * @return 两个参数的商
         */
        public static BigDecimal div(BigDecimal b1, BigDecimal b2) {
            return div(b1, b2, DEFAULT_SCALE);
        }
    
        /**
         * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
         * 
         * @param v1 被除数
         * @param v2 除数
         * @param scale 表示表示需要精确到小数点以后几位。
         * @return 两个参数的商
         */
        public static BigDecimal div(BigDecimal b1, BigDecimal b2, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException("默认小数位必须大于或者0!");
            }
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
        }
    
        /**
         * 提供精确的小数位四舍五入处理。
         * 
         * @param v 需要四舍五入的数字
         * @param scale 小数点后保留几位
         * @return 四舍五入后的结果
         */
        public static BigDecimal round(BigDecimal b, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException("默认小数位必须大于或者0!");
            }
            BigDecimal one = new BigDecimal("1");
            return b.divide(one, scale, BigDecimal.ROUND_HALF_UP);
        }
        
        /**
         * 格式化信息内容
         * 
         * @param v 需要四舍五入的数字
         * @param scale 小数点后保留几位
         * @return 格式化后的结果
         */
        public static String format(BigDecimal b, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException("默认小数位必须大于或者0!");
            }
            StringBuffer formatString = new StringBuffer("###,##0");
            if (scale > 0)
            {
                formatString.append(".");
                for (int i = 0; i < scale; i++)
                {
                    formatString.append("0");
                }
            }
            NumberFormat numberFormat = new DecimalFormat(formatString.toString()); 
            
            return numberFormat.format(b);
        }
    
        /**字符串转换为数据类型
         * 
         * @param str
         * @return
         */
        public static BigDecimal stringToBigDecimal(String str)
        {
            return new BigDecimal(str);
        }
        /**
         * 测试
         * 
         * @param args
         */
        public static void main(String[] args) {
            BigDecimal v1 = new BigDecimal("10.58");
            BigDecimal v2 = new BigDecimal("5");
            BigDecimal v3 = new BigDecimal("5555555555.2722222226");
            System.out.println(NumberUtils.add(v1, v2));
            System.out.println(NumberUtils.sub(v1, v2));
            System.out.println(NumberUtils.mul(v1, v2));
            System.out.println(NumberUtils.div(v1, v2));
            System.out.println(NumberUtils.div(v1, v2,3));
            System.out.println(NumberUtils.round(v3, 1));
            System.out.println(NumberUtils.format(v3, 5));
            
        }
    }


     主要用于数字操作,在java代码中计算不要使用double,float,int,long,short等类型,使用BigDecimal是比较好的。这里提供一个工具类。

  • 相关阅读:
    mybatis 配置之<typeAliases>别名配置元素设置
    <q> 与 <blockquote> 的区别
    line-height属性
    ol/ul/dl的区别
    xampp修改mysql 启动脚本
    linux 设置查看文本行数
    vim跳出括号的方法
    vim中不同模式的帮助信息的查找
    ubuntu下安装自动补全YouCompleteMe
    ubuntu下将CapsLock改为Ctrl键
  • 原文地址:https://www.cnblogs.com/a393060727/p/2857405.html
Copyright © 2011-2022 走看看