gpt4 book ai didi

java - 从 BigDecimal 实例中删除不必要的零

转载 作者:行者123 更新时间:2023-11-30 03:19:30 25 4
gpt4 key购买 nike

我有一个简单的程序,可以添加两个 BigDecimal 实例:

public static void main(String[] args) {

MathContext mathContext = new MathContext(32, RoundingMode.HALF_UP);
System.out.println(new BigDecimal("999999999999999999999999999999").add(BigDecimal.ONE, mathContext));
System.out.println(new BigDecimal("9999999999999999999999999999999").add(BigDecimal.ONE, mathContext));
System.out.println(new BigDecimal("99999999999999999999999999999999").add(BigDecimal.ONE, mathContext));

}

它工作得很好。输出为:

1000000000000000000000000000000
10000000000000000000000000000000
1.0000000000000000000000000000000E+32

我不明白的是如何使结果看起来像:

1000000000000000000000000000000
10000000000000000000000000000000
1.E+32

如果长度小于32位,如何使结果看起来很普通,而如果结果较长,结果应该有科学记数法,但末尾没有不必要的零?

最佳答案

这可以通过不同的方式完成,这是我对您的问题的建议:

public static void main(String[] args) {

MathContext mathContext = new MathContext(32, RoundingMode.HALF_UP);
BigDecimal[] bigDecimals =
{
new BigDecimal("999999999999999999999999999999").add(BigDecimal.ONE, mathContext),
new BigDecimal("9999999999999999999999999999999").add(BigDecimal.ONE, mathContext),
new BigDecimal("99999999999999999999999999999999").add(BigDecimal.ONE, mathContext)
};

for (int i = 0; i < bigDecimals.length; i++) {
if ((bigDecimals[i]).toString().length() < 37) {
System.out.println(bigDecimals[i]);
} else {
System.out.printf("%.1E\n", bigDecimals[i]);
}
}
}

输出结果将如下所示:

1000000000000000000000000000000
10000000000000000000000000000000
1.0E+32

您感兴趣的是通过将数字转换为字符串进行检查过程(条件语句)来计算数字的位数:

bigDecimals.toString().length()

另一件事是以提到/要求的格式打印它:

System.out.printf("%.1E\n", bigDecimals);

示例
%E 返回 1.000000E+32
%.1E 返回 1.0E+32

您可以使用它来满足您进一步的更改或要求。我已将您的值放入数组和 for 循环 中以进行演示,这不会吓到您。

关于java - 从 BigDecimal 实例中删除不必要的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31683046/

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