2017-10-04 273 views
0

請幫我設置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

給我一個提示我做錯了什麼?

回答

0

據我所知(我有點希望我錯了),你不能以特定的方式進行BigDecimal渲染。沒有辦法(我知道)使它使用科學或工程符號,或者控制它何時執行。工程符號只能用於「需要指數」的數字,並且需要指數的情況在BigInteger.toString()的文檔中有解釋。坦率地說,我發現這個解釋很難遵循,我從來沒有想過如何讓這種行爲在應用程序中遵循一個有用的模式。

我發現只是不嘗試,並自己格式化數字更容易。這意味着提取基數爲10的尾數和指數,然後在組件之間串接字符串「E」。尾數部分可能需要四捨五入。如果你知道指數(以10爲底),那麼你可以根據它的數量來計算它是否超出了你想要的閾值,因爲使用了科學記數法。如果沒有,你可以使用BigDecimal.toPlainString(),也許有適當的四捨五入。

工程符號可以用相同的方式處理,但指數四捨五入到最接近的三倍,尾數調整爲補償。

有一個有用的圖書館1可以做必要的對數和權力操作,或看到這個問題2的一些建議。

我有一些代碼可以做到這一點,我很樂意分享,但是這是包含很長時間的方法,我不能保證它是生產質量,或者甚至是可讀的。