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);

    贵在积累~~~~~~

    有的内容是自己平日积累的与工作上遇到的,有的是摘抄其他博主的精彩好文(会附上作者),愿大家共同成长。
  • 相关阅读:
    VisualSVN-Server windows 版安装时报错 "Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details."
    Pytest 单元测试框架之初始化和清除环境
    Pytest 单元测试框架入门
    Python(email 邮件收发)
    Python(minidom 模块)
    Python(csv 模块)
    禅道简介
    2020年最好的WooCommerce主题
    Shopify网上开店教程(2020版)
    WooCommerce VS Magento 2020:哪个跨境电商自建站软件更好?
  • 原文地址:https://www.cnblogs.com/PinkPink/p/9892139.html
Copyright © 2011-2022 走看看