2020-05-17 Java怎么处理银行中的金额问题?

1.Java处理银行中金额数据有精度问题

主要原因是十进制转为二进制循环;会转换不完整。

2.Java中BigDecimal处理精度问题

java类的float和double浮点数很多是有精度问题,比如:

'''

     Double a= 0.9;
     Double b = 0.1;
     System.out.println(a+b);  //输出1.0
     Double a1 =  0.7;
     Double b1 =  0.2;
     System.out.println(a1+b1);  //输出0.8999999999999999

'''
怎么解决呢?一般是用BigDecimal类来解决,如果要深究原理,可以参考其他大佬的文章。

3.作者本人写的工具方法,仅供参考。

'''

/**
 *   金额加法
 * @param value1 加数1
 * @param vaule2 加数2
 * @return 总和
 */
 public static Double add(Double value1,Double vaule2) {
     BigDecimal bigD1 = new BigDecimal(value1.toString());
     BigDecimal bigD2 = new BigDecimal(vaule2.toString());
     return bigD1.add(bigD2).doubleValue();
     
 }
 /**
       *   金额减法
  * @param value1 被减数
  * @param vaule2  减数
  * @return  两数的差
  */
 public static Double subtraction(Double value1,Double vaule2) {
     BigDecimal bigD1 = new BigDecimal(value1.toString());
     BigDecimal bigD2 = new BigDecimal(vaule2.toString());
     return bigD1.subtract(bigD2).doubleValue();
     
 }
 /**
       *   金额的积
  * @param value1 乘数1
  * @param vaule2 乘数2
  * @return  两数的积
  */
 public static Double multipliction(Double value1,Double vaule2) {
     BigDecimal bigD1 = new BigDecimal(value1.toString());
     BigDecimal bigD2 = new BigDecimal(vaule2.toString());
     return bigD1.multiply(bigD2).doubleValue();
     
 }
 
 /**
       *   金额的商
  * @param value1  被除数
  * @param vaule2  除数
  * @return  两数的商
  */
 public static Double division(Double value1,Double vaule2) throws IllegalAccessException {
     BigDecimal bigD1 = new BigDecimal(value1.toString());
     BigDecimal bigD2 = new BigDecimal(vaule2.toString());
     return bigD1.divide(bigD2).doubleValue();
     
 }
 /**
      * 保留两位小数
  * @param value1
  * @return 四舍五入法
  * @throws IllegalAccessException
  */
 public static Double setScale(Double value1) throws IllegalAccessException {
     BigDecimal bigD1 = new BigDecimal(value1.toString());
     return bigD1.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
     
 }

'''

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。