BigDecimal 的 toString() 方法將會把 BigDecimal 通過字符串的方式輸出。這個方法將會在必要的時候使用指數進行輸出。
具體的轉換步驟是按照下面的步驟進行轉換的:
BigDecimal的非標度值的絕對值用字符’0’到’9’,沒有被轉換為一個字符串基地10零(除非它的值是零,在這種情況下,一個單一的’0’字符被使用)。
接下來,計算調整的指數;這是無效的標度,加上字符的轉換的標度值,減1的次數。也就是說,-scale+(ulength-1),其中ulength是十進制數字(其精度)的非標度值的絕對值的長度。
如果該比例大于或等于零,并且調整的指數大于或等于-6,該號碼將被轉換為字符的形式,而無需使用指數表示法。
在這種情況下,如果該比例是零,則沒有小數點被添加和如果規模正小數點將被插入的規模指定的字符數的小數點的右邊。 ‘0’字符添加到轉換的非標度值的左側是必要的。如果前面沒有字符,小數點這個插入之后再傳統的’0’字符作為前綴。
否則(即,如果該比例是負的,或經調整的指數小于-6),該號碼將被采用指數表示法轉換為字符形式。在這種情況下,如果轉換后的BigInteger有一個以上的位小數點第一位數字后插入。
在字符形式的指數,然后后綴轉換非標度值(也許插入小數點);這包含字母“E”后面立刻被調整的指數轉換為字符形式。
后者的基數為十,使用字符’0’到’9’,沒有前導零,并且總是由前綴符號字符’ – ‘(‘ u002D’),如果調整后的指數為負數,否則為’+'(‘ u002B’)。
‘ – ‘最后,整個字符串由一個減號字符的前綴(‘ u002D’)如果非標度值小于零。如果非標度值為零或正數無符號字符作為前綴。
請參考 GitHub 上的源碼代碼中 bigDecimalWithoutScientificNotationTest():方法
https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java
() { String input = RandomStringUtils.() + + + + + + + + + + + + + + + + + + + + + + + + + + + BigDecimal bigNumber = BigDecimal(input)String numberStr = bigNumber.toString().info(numberStr)}
程序最后的輸出如下,將會輸出轉換后的字符串。
2020/02/25 09:43:29.595 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 1503277200971234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234554324324362432767463726478326478326784637264783264736274673864736473246354635463546325645326456325463546536453654632546354653463254653453264564635463263453264
請參考 GitHub 上的源碼代碼中 bigDecimalScientificNotation():方法
https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java
程序最后的輸出如下,將會輸出轉換后的字符串。
2020/02/25 10:00:50.909 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 8.31198E+14
2020/02/25 10:00:50.912 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 831.198E+12
2020/02/25 10:00:50.912 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 831198000000000
BigDecimal類有3個 toString 方法,分別是 toString()、 toEngineeringString() 、toPlainString().
從 BigDecimal 的注釋中可以看到這3個方法的區別:
toString() – 在必要的時候使用科學計數法
toEngineeringString() 在必要的時候使用工程計數法。類似于科學計數法,只不過指數的冪都是3的倍數,這樣方便工程上的應用,因為在很多單位轉換的時候都是10^3
toPlainString() – 不使用任何科學計數法。
不使用指數 | 科學計數法 | 工程計數法 |
---|---|---|
2700 | 2.7 × 103 | 2.7 × 103 |
27000 | 2.7 × 10? | 27 × 103 |
270000 | 2.7 × 10? | 270 × 103 |
2700000 | 2.7 × 10? | 2.7 × 10? |
可以看到根據不同的輸出格式要求,BigDecimal 將會輸出不同格式的內容。這個就便于我們在后面的科學計算中進行轉換和輸出。
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前文章:BigDecimal的toString()的使用方法-創新互聯
當前鏈接:http://www.yijiale78.com/article32/csospc.html
成都網站建設公司_創新互聯,為您提供網站設計、定制網站、網站內鏈、軟件開發、Google、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯