首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从BigDecimal实例中删除不必要的零

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

Stack Overflow用户
提问于 2015-07-29 01:16:36
回答 1查看 134关注 0票数 1

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

代码语言:javascript
复制
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));

}

它工作得非常好。输出为:

代码语言:javascript
复制
1000000000000000000000000000000
10000000000000000000000000000000
1.0000000000000000000000000000000E+32

我不能理解的是如何使结果看起来像:

代码语言:javascript
复制
1000000000000000000000000000000
10000000000000000000000000000000
1.E+32

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

EN

回答 1

Stack Overflow用户

发布于 2015-07-29 01:54:08

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

代码语言:javascript
复制
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]);
        }
    }
}

输出结果将如下所示:

代码语言:javascript
复制
1000000000000000000000000000000
10000000000000000000000000000000
1.0E+32

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

代码语言:javascript
复制
bigDecimals.toString().length()

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

代码语言:javascript
复制
System.out.printf("%.1E\n", bigDecimals);

示例

%E返回1.000000E+32

%.1E返回1.0E+32

您可以使用它来满足您进一步的更改或需求。我已经将你的值放在数组和for loop中用于演示,这应该不会吓到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31683046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档