gpt4 book ai didi

Java BigDecimal : How to set scale only if it's greater than certain precision point?

转载 作者:行者123 更新时间:2023-11-29 08:22:51 25 4
gpt4 key购买 nike

我有一个用例,我只想在数字的精度大于特定数字时设置比例。换句话说,如果精度为 5,我想将比例设置为 4,但如果精度小于 4,则保留数字不变。

这是我期待的预期结果->

123.123 => 123.123 -> 保持数字不变,因为精度小于 4。

123.123456 => 123.1235 -> 设置比例,并四舍五入。

123 => 123 -> 保持数字不变,因为精度小于 4。

0.1234445 => 0.1234 -> 设置比例,并向下舍入。

如何使用 Java 的 BigDecimal 获得此结果?

最佳答案

您真正要问的问题似乎是“如何截断 BigDecimal 的小数部分,使其小数点右侧最多有 4 个数字?”

首先,我认为您应该确保了解 scaleprecision 对于 BigDecimal 的含义。

如果你运行这个小程序:

public static void main(String[] args) {
List<BigDecimal> decimals = new LinkedList<>();
decimals.add( new BigDecimal(".123456"));
decimals.add( new BigDecimal("1.23456"));
decimals.add( new BigDecimal("12.3456"));
decimals.add( new BigDecimal("123.456"));
decimals.add( new BigDecimal("1234.56"));
decimals.add( new BigDecimal("12345.6"));
decimals.add( new BigDecimal("123456"));

for(BigDecimal bd : decimals){
System.out.println(bd.toPlainString() + ". scale = " + bd.scale() + ", precision = " + bd.precision());
}
}

您将看到以下输出:

0.123456. scale = 6, precision = 6 
1.23456. scale = 5, precision = 6
12.3456. scale = 4, precision = 6
123.456. scale = 3, precision = 6
1234.56. scale = 2, precision = 6
12345.6. scale = 1, precision = 6
123456. scale = 0, precision = 6

你现在应该看到你想要做的是查询然后调整数字的scale

static BigDecimal doIt(BigDecimal input){
if(input.scale() > 4){
return input.setScale(4, RoundingMode.HALF_DOWN);
}
else{
return input;
}
}

一个小测试程序显示输出是你所要求的:

public static void main(String[] args) {
List<BigDecimal> decimals = new LinkedList<>();
decimals.add(new BigDecimal("123.123"));
decimals.add(new BigDecimal("123.123456"));
decimals.add(new BigDecimal("123"));
decimals.add(new BigDecimal("0.1234445"));


for (BigDecimal bd : decimals) {
System.out.println(bd.toPlainString() + " ---> " + doIt(bd));
}
}

输出

123.123 ---> 123.123
123.123456 ---> 123.1235
123 ---> 123
0.1234445 ---> 0.1234

关于Java BigDecimal : How to set scale only if it's greater than certain precision point?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56010342/

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