java 浮点数转整数精度处理

本文通过多个案例详细解析了Java中BigDecimal类在处理浮点数运算和精度问题时的方法与技巧,包括不同方法的使用场景及可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

System.out.println("------case1------");
BigDecimal bigDecimal = new BigDecimal(37.98);
System.out.println(bigDecimal);     //37.97999999999999687361196265555918216705322265625
System.out.println(bigDecimal.intValue()); //37

System.out.println("------case2------");
int totalAmount = (int) (37.98 * 100);  
System.out.println(totalAmount);        //3797

System.out.println("------case3------");
totalAmount = new BigDecimal(37.98 * 100).intValue();
System.out.println(totalAmount);    //3797

System.out.println("------case4------");
System.out.println(bigDecimal.movePointRight(2));       //3797.999999999999687361196265555918216705322265625
System.out.println(bigDecimal.movePointRight(2).intValue()); //3797

System.out.println("------case5------");
System.out.println(new BigDecimal(37).intValueExact()); //没有异常,没有小数点被截取 37
//System.out.println(bigDecimal.intValueExact());             //存在异常,小数点精度丢失

System.out.println("------case6------");
System.out.println(bigDecimal.multiply(new BigDecimal(100)));   //3797.99999999999968736119626555591821670532226562500
System.out.println(bigDecimal.multiply(new BigDecimal(100)).intValue()); //3797

//正确处理
System.out.println("------case7------");
System.out.println(new BigDecimal(37.9899).setScale(2, BigDecimal.ROUND_HALF_UP));   //保留两位小数,后面小数上取整 37.99
System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue()); //3798
System.out.println(Math.ceil(37.98 * 100));        //37.98 * 100 = 3797.9999999999995
System.out.println((int) Math.ceil(37.98 * 100)); //3798

 

------case1------
37.97999999999999687361196265555918216705322265625
37
------case2------
3797
------case3------
3797
------case4------
3797.999999999999687361196265555918216705322265625
3797
------case5------
37
------case6------
3797.99999999999968736119626555591821670532226562500
3797
------case7------
37.99
3798
3797.9999999999995
3798.0
3798
 

 

转载于:https://my.oschina.net/u/2552286/blog/2962535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值