gpt4 book ai didi

java - 打印没有多余零的四舍五入数字

转载 作者:行者123 更新时间:2023-11-29 05:41:39 25 4
gpt4 key购买 nike

我正在尝试使用 BigDecimal.ROUND_HALF_UP 进行舍入,但没有得到预期的结果。这段代码:

String desVal="21.999";  
BigDecimal decTest=new BigDecimal(
String.valueOf(desVal)
)
.setScale(
Integer.parseInt(decimalPlaces), BigDecimal.ROUND_DOWN
);
System.out.println(decTest);

给出以下结果:

decimalPlaces=1 it is displaying 21.9 //correct 
decimalPlaces=2 displaying 21.99 //correct
decimalplaces=3 displaying 21.999 //correct
decimalplaces=4 displaying 21.9990 //incorrect

我想得到以下信息:

decimalPlaces=1 should display 21.9      
decimalPlaces=2 should display 21.99
decimalplaces=3 should display 21.999
decimalplaces=4 should display 21.999

有没有办法用标准 Java 来做到这一点(即没有外部库)?

最佳答案

使用BigDecimal#stripTrailingZeros() :

String[] decimalPlaces = new String[] {"2", "2", "3", "4", "4"};
String[] desVal = new String[] {"20", "21.9", "21.90", "21.99999", "21.99990"};

for (int i = 0; i < desVal.length; i++) {
BigDecimal decTest = new BigDecimal(desVal[i]);

if (decTest.scale() > 0 && !desVal[i].endsWith("0") && !(Integer.parseInt(decimalPlaces[i]) > decTest.scale())) {
decTest = decTest.setScale(Integer.parseInt(decimalPlaces[i]),
BigDecimal.ROUND_DOWN).stripTrailingZeros();
}
System.out.println(decTest);
}

输出:

20
21.9
21.90
21.9999
21.99990

关于java - 打印没有多余零的四舍五入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com