zoukankan      html  css  js  c++  java
  • 金额保留2位小数 xx.00

    在项目中, 关于交易的时候,  我们自己对金额做了处理,  但是与第三方进行交互, 不是第三方要的金额形式,   第三方要的是:    元并且保留两位小数  ,下面是一个小列子


    /** * @desc 缴费金额(单位:元) */ private Long Pay_amount; //A类里面有一个属性

    A a = new A(); //创建对象
    
    

    //比如说lrPaymentItem.getPay_amount()=500000 精确到厘,但是别人要的是元,并且要两位小时,就除10000 ,除完了等于50元
    BigDecimal amount = new BigDecimal(a.getPay_amount()).divide(new BigDecimal("10000")); 

    
    
    //保留2位小数, 最后是50.00  元

    String totalFee = new DecimalFormat("0.00").format(amount); map.put("totalFee", String.valueOf(totalFee)); //保留2位小数, 最后是50.00 元




     eg2: 处理类型转换之前发生的问题, 如下: double转long类型, 进行了四舍五入!!!!丢失了原来的参数.

    import java.math.BigDecimal;
    
    public class demo {
    
        public static void main(String[] args) {
    
            Double valueOf = Double.valueOf(1.25);
            System.out.println(valueOf); // 1.25
    
            System.out.println(valueOf.longValue() * 10000); // 结果是10000 , Double转换 long的时候, 发生了错误.会进行转移的.
    
            BigDecimal amount = new BigDecimal(1.25); // 用了BigDecimal类来处理
            System.out.println(amount); // 1.25
    
            BigDecimal amount3 = new BigDecimal(valueOf).multiply(new BigDecimal("10000")); // 用了BigDecimal类来处理
            System.out.println(amount3); // 12500.00
    
            int a = amount3.intValue(); // 用 intValue 和 longValue 方法, 把小数点后面2个0给去掉
            long b = amount3.longValue();
    
            System.out.println("--------------" + a);
            System.out.println("______________" + b);
    
        }
    
    }



    控制台打印结果:

    1.25
    10000
    1.25
    12500.00
    --------------12500
    ______________12500

     

     补充, 对月案例2, 在运行的过程中发生了错误, 原因就是 BigDecimal 对 double 接收进行了精度丢失. 

    解决方案,

    1.先把double类型, 转成String类型.

    2.然后将String类型转换成BigDecimal接收, 这样不会丢失精度.   如下

    Double valueOf = Double.valueOf(refund_Apply.getRefund_amount());     //refund_Apply.getRefund_amount()    是String类型
    Double valueOf1 = valueOf.doubleValue() * 10000;    // 计算 ,在原来的价格上 *10000
    String valueOf2 = Double.valueOf(valueOf1).toString(); //转成String类型 , 但是有 .0
    BigDecimal money = new BigDecimal(valueOf2); //用 BigDecimal接收, 就是为了要去掉小数点后面的 .0

    long refund_money = money.longValue();
    logger.info("____refund_money: {}", refund_money);

    贵在积累~~~~~~

    有的内容是自己平日积累的与工作上遇到的,有的是摘抄其他博主的精彩好文(会附上作者),愿大家共同成长。
  • 相关阅读:
    MySQL关键性能监控(QPS/TPS)
    Python小技巧
    Redis高可用演进(一)
    防范XSS攻击
    java引用知识
    ehcache同步原理
    ehcache监控
    SecureCRT使用技巧
    JUC整理笔记五之梳理Varhandle(下)
    JUC整理笔记四之梳理VarHandle(上)
  • 原文地址:https://www.cnblogs.com/PinkPink/p/9892139.html
Copyright © 2011-2022 走看看