zoukankan      html  css  js  c++  java
  • java BigDecimal工具类

    package com.core.calculate;
    
    import java.math.BigDecimal;
    import java.text.DecimalFormat;
    
    /**
     * Created by tangxin on 2017/1/6 0006.
     * 如有问题,欢迎提出更正
     */
    public class BigNum {
    
        public static final String BIG_NUM_FMT_COMMA = "#,###,###,###,###,###,##0.00";//千位分隔符 方便查看金额具体大小
        public static final String BIG_NUM_FMT = "##################0.00";//不带千位分隔符
        public static final String BIG_NUM_HUNDRED = "100";//100常量
        public static final int BIG_NUM_SCALE = 2;//保留两位小数
    
    
        private BigNum(){
    
        }
        /**
         * 高精度加法
         * @param v1
         * @param v2
         * @return
         */
        public static BigDecimal add(String v1, String v2) {
            BigDecimal b1 = new BigDecimal(v1);
            BigDecimal b2 = new BigDecimal(v2);
            return b1.add(b2);
        }
    
        /**
         * 高精度减法
         * @param v1
         * @param v2
         * @return
         */
        public static BigDecimal sub(String v1,String v2){
            BigDecimal b1 = new BigDecimal(v1);
            BigDecimal b2 = new BigDecimal(v2);
            return b1.subtract(b2);
        }
    
        /**
         * 高精度乘法
         * @param v1
         * @param v2
         * @return
         */
        public static BigDecimal mul(String v1,String v2){
            BigDecimal b1 = new BigDecimal(v1);
            BigDecimal b2 = new BigDecimal(v2);
            return b1.multiply(b2);
        }
    
        /**
         * 高精度除法
         * @param v1
         * @param v2
         * @param scale
         * @return
         */
        public static BigDecimal div(String v1, String v2, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
            BigDecimal b1 = new BigDecimal(v1);
            BigDecimal b2 = new BigDecimal(v2);
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
        }
    
        /**
         * 保留小数位
         * @param v
         * @param scale
         * @return
         */
        public static BigDecimal round(String v, int scale) {
            if (scale < 0) {
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
            BigDecimal b = new BigDecimal(v);
            BigDecimal one = new BigDecimal("1");
            return b.divide(one, scale, BigDecimal.ROUND_HALF_UP);
        }
    
        /**
         * 分转换成元
         * @param v
         * @return
         */
        public static BigDecimal penny2dollar(String v){
            BigDecimal s = div(v,"100",2);//保留两位小数
            return s;
        }
    
        /**
         * 元转换成分
         * @param v
         * @return
         */
        public static BigDecimal dollar2penny(String v){
            return mul(v, "100");
        }
    
        /**
         * 格式化金额
         * 千位分隔符 方便查看金额具体大小 BIG_NUM_FMT = "#,###,###,###,###,###,##0.00"
         * 精确两位小数 .99 -> 0.99
         *             1111111.985 -> 1,111,111.99
         * @param v
         * @return
         */
        public static String formatNumber(String v){
            return formatNumber(v,BIG_NUM_FMT_COMMA);
        }
    
        /**
         * 格式化金额
         * @param v
         * @param pattern BigNum类中的常量 BIG_NUM_FMT_COMMA,BIG_NUM_FMT
         * @return
         */
        public static String formatNumber(String v,String pattern) {
            return new DecimalFormat(pattern).format(new BigDecimal(v));
        }
    
        public static void main(String[] args) {
            System.out.println(BigNum.add("1.99","20.999"));
            System.out.println(BigNum.sub("1.99","20.999"));
            String s = "1111111.985";
            String a = BigNum.formatNumber(s);
            System.out.println(s);
            System.out.println(a);
        }
    }
  • 相关阅读:
    深入理解jvm分享培训pdf(转载) 老李
    innobackupex自动备份脚本(增量备份,自动压缩)
    多线程调用生成主键流水号存储过程产生主键冲突问题解决方案
    mysql 5.7新数据库sys解析(一)
    根据日期累加金额的mysql
    mysql字符串分割函数(行转列)
    使用innobackupex备份mysql数据库
    css学习inlineblock详解及dispaly:inline inlineblock block 三者区别精要概括
    html良好结构之豆瓣风格
    HTML5学习笔记html5与传统html区别
  • 原文地址:https://www.cnblogs.com/fofawubian/p/6262871.html
Copyright © 2011-2022 走看看