BigDecimal movePoint = money.setScale(scale, BigDecimal.ROUND_HALF_UP).movePointRight(scale) 过时了 怎么替换
时间: 2024-09-24 08:03:44 浏览: 41
`BigDecimal movePoint = money.setScale(scale, BigDecimal.ROUND_HALF_UP).movePointRight(scale)` 这段代码在Java 8之后已经不再推荐使用,因为从Java 9开始,`RoundingMode`枚举类型及其相关的静态方法已经被标记为过时。如果你需要保留四舍五入的行为并右移小数点,可以按照以下方式替换:
```java
import java.math.BigDecimal;
import java.math.RoundingMode;
// ... (其他导入)
MoneyType money = ...; // 假设MoneyType是一个自定义类包含BigDecimal类型的字段
int scale = ...; // 小数位数
// 使用现代API
BigDecimal roundedMoney = money.setScale(scale, RoundingMode.HALF_UP);
BigDecimal movedMoney = roundedMoney.stripTrailingZeros(); // 移除多余的零
```
这里的`stripTrailingZeros()`方法会直接去除小数部分多余的零,然后得到新的`movedMoney`值。
相关问题
为什么bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP); bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);这两行代码对99.999处理的时候,输出的是100.0而不是100.00
这是因为在第一行代码中,你将BigDecimal对象bd的小数位数设置为3,并使用四舍五入模式进行舍入。此时,bd的值被舍入为了100.000。
在第二行代码中,你再次将BigDecimal对象bd的小数位数设置为2,并使用四舍五入模式进行舍入。但是,此时bd的值已经被舍入为100.000,且小数位数为3,因此再次舍入时只会保留两位小数,即变成了100.00。
如果要将99.999舍入为100.00,可以直接使用以下代码:
```
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
```
String nowvalue = "1659237.509934"; int i1 = nowvalue.indexOf("."); String substring = nowvalue.substring(i1 - 4).replace(".", ""); String substrings = nowvalue.substring(0, i1 - 4); nowvalue = substrings + "." + substring; BigDecimal bigDecimal = new BigDecimal(nowvalue); bigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("bigDecimal = " + bigDecimal);优化代码
你可以使用以下代码对给定的字符串进行优化:
```java
String nowvalue = "1659237.509934";
BigDecimal bigDecimal = new BigDecimal(nowvalue);
bigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("bigDecimal = " + bigDecimal);
```
这段代码将会输出一个保留两位小数的BigDecimal值。它通过使用BigDecimal类的setScale()方法来设置小数位数,并使用ROUND_HALF_UP舍入模式来进行四舍五入。不再需要对字符串进行截取和替换操作,直接使用BigDecimal类进行精确计算。
阅读全文