正确格式的BigDecimal输出

问题描述:

请帮我设置BigDecimal的输出。例如: 我需要输出长度小于8位数字的数字,如下所示:“12345678”,如果多则输入:“1,2345Å+ 9”。正确格式的BigDecimal输出

toPlainString(); 
toEngineeringString(); 
toString(); 

是否按预期工作

方法并不:下面

public class TestBigDecimalOutput { 
     public static void main(String[] args) { 

      BigDecimal d = new BigDecimal("57657657657453646587980887663654676580.24545346565476767645"); 
      String outPlainString = d.toPlainString(); 
      String outEngineeringString = d.toEngineeringString(); 
      String outString = d.toString(); 

      System.out.println(outPlainString); 
      System.out.println(outEngineeringString); 
      System.out.println(outString); 
     } 
    } 

代码使下一个输出:

57657657657453646587980887663654676580.24545346565476767645 57657657657453646587980887663654676580.24545346565476767645 57657657657453646587980887663654676580.24545346565476767645

给我一个提示我做错了什么?

据我所知(我有点希望我错了),你不能以特定的方式进行BigDecimal渲染。没有办法(我知道)使它使用科学或工程符号,或者控制它何时执行。工程符号只能用于“需要指数”的数字,并且需要指数的情况在BigInteger.toString()的文档中有解释。坦率地说,我发现这个解释很难遵循,我从来没有想过如何让这种行为在应用程序中遵循一个有用的模式。

我发现只是不尝试,并自己格式化数字更容易。这意味着提取基数为10的尾数和指数,然后在组件之间串接字符串“E”。尾数部分可能需要四舍五入。如果你知道指数(以10为底),那么你可以根据它的数量来计算它是否超出了你想要的阈值,因为使用了科学记数法。如果没有,你可以使用BigDecimal.toPlainString(),也许有适当的四舍五入。

工程符号可以用相同的方式处理,但指数四舍五入到最接近的三倍,尾数调整为补偿。

有一个有用的图书馆1可以做必要的对数和权力操作,或看到这个问题2的一些建议。

我有一些代码可以做到这一点,我很乐意分享,但是这是包含很长时间的方法,我不能保证它是生产质量,或者甚至是可读的。