金额计算
来源:互联网 发布:360软件管理下载 编辑:程序博客网 时间:2024/05/18 21:44
package util;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberFormat;/*** * * 金额 * * 如果需要精确计算,必须用String来够造BigDecimal! !! * * Java里面的商业计算,不能用float和double,因为他们无法 进行精确计算。 * 但是Java的设计者给编程人员提供了一个很有用的类BigDecimal, 他可以完善float和double类无法进行精确计算的缺憾。 * BigDecimal类位于java.maths类包下。 它的构造函数很多,最常用的: BigDecimal(double val) * BigDecimal(String str) BigDecimal(BigInteger val) BigDecimal(BigInteger * unscaledVal, int scale) */public class MathCaclateUtil { /*** * 保留2位小数 四舍五入 * * @param a * * @return 返回一个double类型的2位小数 */ public static double get2Double(Double doubleVal, int scale) { if (null == doubleVal) { doubleVal = new Double(0); } return new BigDecimal(doubleVal).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } public static double get2DoubleForNowprice(Double doubleVal, int scale) { if (null == doubleVal) { doubleVal = new Double(0); } return new BigDecimal(doubleVal).setScale(scale, BigDecimal.ROUND_HALF_DOWN).doubleValue(); } /*** * 格式化Double类型并保留scale位小数 四舍五入 * * @param doubleVal * @param scale * scale必须为大于0的正整数,不能等于0 * @return */ public static String formatBy2Scale(Double doubleVal, int scale) { if (null == doubleVal) { doubleVal = new Double(0); } StringBuffer sbStr = new StringBuffer("0."); for (int i = 0; i < scale; i++) { sbStr.append("0"); } DecimalFormat myformat = new DecimalFormat(sbStr.toString()); return myformat.format(doubleVal); } /*** * Double类型相加 <font color="red">+</font><br/> * ROUND_HALF_UP <font color="red">四舍五入</font><br/> * * @param val1 * * @param val2 * * @param scale * <font color="red">保留scale位小数</font><br/> * @return */ public static double add(Double val1, Double val2, int scale) { if (null == val1) { val1 = new Double(0); } if (null == val2) { val2 = new Double(0); } return new BigDecimal(Double.toString(val1)).add(new BigDecimal(Double.toString(val2))) .setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /*** * Double类型相减 <font color="red">—</font><br/> * ROUND_HALF_UP <font color="red">四舍五入</font><br/> * * @param val1 * * @param val2 * * @param scale * <font color="red">保留scale位小数</font><br/> * @return */ public static double subtract(Double val1, Double val2, int scale) { if (null == val1) { val1 = new Double(0); } if (null == val2) { val2 = new Double(0); } return new BigDecimal(Double.toString(val1)).subtract(new BigDecimal(Double.toString(val2))) .setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /*** * Double类型相乘 <font color="red">*</font><br/> * ROUND_HALF_UP <font color="red">四舍五入</font><br/> * * @param val1 * * @param val2 * * @param scale * <font color="red">保留scale位小数</font><br/> * @return */ public static double multiply(Double val1, Double val2, int scale) { if (null == val1) { val1 = new Double(0); } if (null == val2) { val2 = new Double(0); } return new BigDecimal(Double.toString(val1)).multiply(new BigDecimal(Double.toString(val2))) .setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /*** * Double类型相除 <font color="red">/</font><br/> * ROUND_HALF_UP <font color="red">四舍五入</font><br/> * * @param val1 * * @param val2 * * @param scale * <font color="red">保留scale位小数</font><br/> * @return */ public static double divide(Double val1, Double val2, int scale) { if (null == val1) { val1 = new Double(0); } if (null == val2 || val2 == 0) { val2 = new Double(1); } // new BigDecimal(Double.toString(val1)).divide(new // BigDecimal(Double.toString(val2))) // .setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue() return new BigDecimal(Double.toString(val1)) .divide(new BigDecimal(Double.toString(val2)), scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /*** * Double类型取余 <font color="red">%</font><br/> * ROUND_HALF_UP <font color="red">四舍五入</font><br/> * * @param val1 * * @param val2 * * @param scale * <font color="red">保留scale位小数</font><br/> * @return */ public static int divideAndRemainder(Double val1, Double val2, int scale) { if (null == val1) { val1 = new Double(0); } if (null == val2 || val2 == 0) { val2 = new Double(1); } return new BigDecimal(Double.toString(val1)).divideAndRemainder(new BigDecimal(Double.toString(val2)))[1] .setScale(scale, BigDecimal.ROUND_HALF_UP).intValue(); } /*** * 格式化Double类型数据 * * @param val * @param fmt * NumberFormat currency = NumberFormat.getCurrencyInstance(); * //建立货币格式化引用 NumberFormat percent = * NumberFormat.getPercentInstance(); //建立百分比格式化引用 * @param maximumFractionDigits * 如果是百分比 设置小数位数(四舍五入) * @return */ public static String formatByNumberFormat(Double val, NumberFormat fmt, int maximumFractionDigits) { if (fmt.equals(NumberFormat.getPercentInstance())) { fmt.setMaximumFractionDigits(maximumFractionDigits); // 百分比小数点最多3位 } return fmt.format(val); } /*** * 比较大小 -1 <、0 =、1 >,即左边比右边数大,返回1,相等返回0,比右边小返回-1。 * * @param doubleVal * @return */ public static int compareTo(Double val1, Double val2) { if (null == val1) { val1 = new Double(0); } if (null == val2) { val2 = new Double(0); } return new BigDecimal(val1).compareTo(new BigDecimal(val2)); }}
阅读全文
0 0
- 金额计算
- 合计金额计算
- vb计算纳税金额
- vb计算纳税金额
- 计算纳税金额
- 纳税金额计算
- 计算纳税金额
- 计算纳税金额
- 自定计算金额
- 金额计算精度问题
- 货币金额的计算
- 货币金额的计算
- JavaScript带小数金额计算
- java中计算金额问题
- 策略模式---计算消费金额
- iOS 支付金额计算问题
- java金额类计算封装
- angularjs之购物金额计算
- CSS 的高级技巧
- FLOPS和吞吐率
- 关于面试
- Spring源码解析——如何阅读源码
- React之智能组件和木偶组件
- 金额计算
- 715. Range Module
- c#观察者模式和事件委托的联合使用
- Android多线程--HandlerThread的使用以及原理
- asp.net 程序 Respons.redirect("XXXXXX")无法跳转
- 解决python-opencv中路径不能读中文的问题
- android handler Looper MessageQueue源码分析
- CCF 201703-1 分蛋糕
- PostgreSQL java连接SQL(七)