溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分析Java BigDecimal toString()的轉換和輸出

發(fā)布時間:2021-11-04 13:50:45 來源:億速云 閱讀:260 作者:iii 欄目:編程語言

這篇文章主要講解了“分析Java BigDecimal toString()的轉換和輸出”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“分析Java BigDecimal toString()的轉換和輸出”吧!

BigDecimal 的 toString() 方法將會把 BigDecimal 通過字符串的方式輸出。這個方法將會在必要的時候使用指數(shù)進行輸出。

具體的轉換步驟是按照下面的步驟進行轉換的:

BigDecimal的非標度值的絕對值用字符’0’到’9’,沒有被轉換為一個字符串基地10零(除非它的值是零,在這種情況下,一個單一的’0’字符被使用)。

接下來,計算調整的指數(shù);這是無效的標度,加上字符的轉換的標度值,減1的次數(shù)。也就是說,-scale+(ulength-1),其中ulength是十進制數(shù)字(其精度)的非標度值的絕對值的長度。

如果該比例大于或等于零,并且調整的指數(shù)大于或等于-6,該號碼將被轉換為字符的形式,而無需使用指數(shù)表示法。

在這種情況下,如果該比例是零,則沒有小數(shù)點被添加和如果規(guī)模正小數(shù)點將被插入的規(guī)模指定的字符數(shù)的小數(shù)點的右邊。 ‘0’字符添加到轉換的非標度值的左側是必要的。如果前面沒有字符,小數(shù)點這個插入之后再傳統(tǒng)的’0’字符作為前綴。

否則(即,如果該比例是負的,或經調整的指數(shù)小于-6),該號碼將被采用指數(shù)表示法轉換為字符形式。在這種情況下,如果轉換后的BigInteger有一個以上的位小數(shù)點第一位數(shù)字后插入。

在字符形式的指數(shù),然后后綴轉換非標度值(也許插入小數(shù)點);這包含字母“E”后面立刻被調整的指數(shù)轉換為字符形式。

后者的基數(shù)為十,使用字符’0’到’9’,沒有前導零,并且總是由前綴符號字符’ – ‘(‘ u002D’),如果調整后的指數(shù)為負數(shù),否則為’+'(‘ u002B’)。

‘ – ‘最后,整個字符串由一個減號字符的前綴(‘ u002D’)如果非標度值小于零。如果非標度值為零或正數(shù)無符號字符作為前綴。

不使用科學計數(shù)法將 BigDecimal 轉換為 String

SRC

請參考 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)}

OUTPUT

程序最后的輸出如下,將會輸出轉換后的字符串。

2020/02/25 09:43:29.595 [main] INFO c.ossez.maths.BigDecimalDemoUnitTest - 1503277200971234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234554324324362432767463726478326478326784637264783264736274673864736473246354635463546325645326456325463546536453654632546354653463254653453264564635463263453264

使用科學計數(shù)法將 BigDecimal 轉換為 String

SRC

請參考 GitHub 上的源碼代碼中 bigDecimalScientificNotation():方法

https://github.com/cwiki-us-demo/java-tutorials/blob/master/java-numbers/src/test/java/com/ossez/maths/BigDecimalDemoUnitTest.java

() {
    BigDecimal bigNumberString numberStrMathContext mc = MathContext()bigNumber = BigDecimal(RandomStringUtils.()+mc).info(bigNumber.toString()).info(bigNumber.toEngineeringString()).info(bigNumber.toPlainString())}

 

OUTPUT

程序最后的輸出如下,將會輸出轉換后的字符串。

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個方法的區(qū)別:

  • toString() – 在必要的時候使用科學計數(shù)法

  • toEngineeringString() 在必要的時候使用工程計數(shù)法。類似于科學計數(shù)法,只不過指數(shù)的冪都是3的倍數(shù),這樣方便工程上的應用,因為在很多單位轉換的時候都是10^3

  • toPlainString() – 不使用任何科學計數(shù)法。

不使用指數(shù)

科學計數(shù)法

工程計數(shù)法

27002.7 × 1032.7 × 103
270002.7 × 10?27 × 103
2700002.7 × 10?270 × 103
27000002.7 × 10?2.7 × 10?

可以看到根據(jù)不同的輸出格式要求,BigDecimal 將會輸出不同格式的內容。這個就便于我們在后面的科學計算中進行轉換和輸出。

感謝各位的閱讀,以上就是“分析Java BigDecimal toString()的轉換和輸出”的內容了,經過本文的學習后,相信大家對分析Java BigDecimal toString()的轉換和輸出這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI