金额保留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);

 

 

 

 

 

贵在积累~~~~~~

转载于:https://www.cnblogs.com/PinkPink/p/9892139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值