java中BigDecimal处理小数点

本文详细介绍了Java中BigDecimal类的基本使用方法,包括设置小数精度、不同的四舍五入方式以及执行基本算术运算如加减乘除等。通过实例展示了如何精确控制浮点数运算结果。

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

            BigDecimal   a1 = new BigDecimal("3.456");
	a1 = a1.setScale(1, BigDecimal.ROUND_DOWN); //直接删除多余的小数位
	System.out.println(a1);   //3.4
	BigDecimal   a2 = new BigDecimal("3.456");
	a2 = a2.setScale(1, BigDecimal.ROUND_UP);   //进位处里
	System.out.println(a2);   //3.5
	BigDecimal   a3 = new BigDecimal("3.456");
	a3 = a3.setScale(2, BigDecimal.ROUND_HALF_UP);  //向上取整四舍五入
	System.out.println(a3);   //3.46
	BigDecimal   a4 = new BigDecimal("3.35");
	a4 = a4.setScale(1, BigDecimal.ROUND_HALF_DOWN);  //向下取整四舍五入
	System.out.println(a4);   //3.3
	
	//1: scale指的是你小数点后的位数。比如82.568则score就是3
	BigDecimal   a5 = new BigDecimal("82.568");
	System.out.println(a5.scale()); //获取 a5 这个数的小数位数
	//2.roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种。比    如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。
	
	/*3.pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
	的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,
	roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可以自己选!*/
	
	//4. 对于一般  add、subtract、multiply 则表示 加法, 减法,和乘法,

转载于:https://my.oschina.net/u/3013327/blog/846738

### Java BigDecimal去除小数点后多余零的方法 在Java处理`BigDecimal`对象时,如果希望移除小数部分不必要的零,可以采用多种方式实现这一目标。以下是几种常见方法: #### 使用 `stripTrailingZeros()` 方法 此方法能够有效地删除`BigDecimal`数值中小数点之后所有的尾随零,并返回一个新的`BigDecimal`实例表示简化后的值。 ```java import java.math.BigDecimal; public class Main { public static void main(String[] args) { BigDecimal number = new BigDecimal("20.7000"); BigDecimal strippedNumber = number.stripTrailingZeros(); System.out.println(strippedNumber); } } ``` 上述代码展示了如何通过调用`stripTrailingZeros()`来清理掉不需要的小数位[^1]。 #### 利用 `DecimalFormat` 进行格式化输出 另一种方案是借助于`DecimalFormat`类来进行自定义格式化的字符串转换工作,在这里可以通过设置特定模式达到相同的效果——即只保留有效数字而舍弃其余部分。 ```java import java.text.DecimalFormat; import java.math.BigDecimal; public class Main { private static final DecimalFormat decimalFormat = new DecimalFormat("###################.###########"); public static void main(String[] args){ System.out.print("格式化结果:"); System.out.println(decimalFormat.format(new BigDecimal("10.10"))); } } ``` 这段程序说明了利用预设好的`DecimalFormat`对象对给定的大数进行精确控制其显示形式的过程[^2]。 #### 结合 `toPlainString()` 和 `stripTrailingZeros()` 对于某些场景下可能还需要进一步加工得到更简洁直观的结果,则可以在原有基础上加上`.toPlainString()`操作以获得不含指数记法的标准十进制串表达式。 ```java import java.math.BigDecimal; public class Main { public static void main(String[] args) { String result = new BigDecimal(spstFil.getCnt()).stripTrailingZeros().toPlainString(); // 假设 spstFil.getCnt() 返回的是某个 BigDecimal 类型的数据成员 cnt 的值 System.out.println(result); } } ``` 该片段体现了当需要将最终计算所得的`BigDecimal`转成常规字符序列作为输出或存储用途时所采取的做法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值