我有一个简单的程序,可以添加两个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位,我如何使结果看起来很普通,而如果结果更长,结果应该有科学记数法,但末尾没有不必要的零?
发布于 2015-07-29 01:54:08
这可以通过不同的方式来完成,这是我对你的问题的建议:
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 loop中用于演示,这应该不会吓到你。
https://stackoverflow.com/questions/31683046
复制相似问题