說明:如果您有任何疑問或想咨詢其他業務請撥打電話 400 685 0732
全網監測海量數據按需發布監測預警
實時把握輿情動態精準追溯信息源頭
double轉string java中double類型如何轉換為String類型
在我們做的項目中,有一個字符串的生成,我們需要double去拼接,結果發現了,拼接后的字符串,那個double值用科學計數法表示了,有用int試了一下,發現int不存在這個問題,只有double和float包括各自的包裝類也有這個問題,如何讓結果不出現科學計數法哪?
double轉string——java中double類型轉換為String類型
doublenum=1.0;
StringstrNum=Double.toString(num);
string類型顯示1.0
如果string類型顯示1怎么轉
doublenum=1.0時轉String類型為1
doublenum=1.1時轉String類型為1.1
關于java中Double類型的運算精度問題
在《EffectiveJava》這本書中也提到這個原則,float和double只能用來做科學計算或者是工程計算,在商業計算中我們要用java.math.BigDecimal。BigDecimal一共有4個夠造方法,我們不關心用BigInteger來夠造的那兩個,那么還有兩個,它們是:
BigDecimal(doubleval)
TranslatesadoubleintoaBigDecimal.
BigDecimal(Stringval)
TranslatestheStringrEPResentationofaBigDecimalintoaBigDecimal.
上面的API簡要描述相當的明確,而且通常情況下,上面的那一個使用起來要方便一些。我們可能想都不想就用上了,會有什么問題呢?等到出了問題的時候,才發現上面哪個夠造方法的詳細說明中有這么一段:
Note:theresultsofthisconstructorcanbesomewhatunpredictable.OnemightassumethatnewBigDecimal(.1)isexactlyequalto.1,butitisactuallyequalto.1000000000000000055511151231257827021181583404541015625.Thisissobecause.1cannotberepresentedexactlyasadouble(or,forthatmatter,asabinaryfractionofanyfinitelength).Thus,thelongvaluethatisbeingpassedintotheconstructorisnotexactlyequalto.1,appearancesnonwithstanding.
The(String)constructor,ontheotherhand,isperfectlypredictable:newBigDecimal(“.1”)isexactlyequalto.1,asonewouldexpect.Therefore,itisgenerallyrecommendedthatthe(String)constructorbeusedinpreferencetothisone
原來我們如果需要精確計算,非要用String來夠造BigDecimal不可!在《EffectiveJava》一書中的例子是用String來夠造BigDecimal的,但是書上卻沒有強調這一點,這也許是一個小小的失誤吧。
解決方案
現在我們已經可以解決這個問題了,原則是使用BigDecimal并且一定要用String來夠造。
但是想像一下吧,如果我們要做一個加法運算,需要先將兩個浮點數轉為String,然后夠造成BigDecimal,在其中一個上調用add方法,傳入另一個作為參數,然后把運算的結果(BigDecimal)再轉換為浮點數。你能夠忍受這么煩瑣的過程嗎?下面我們提供一個工具類Arith來簡化操作。它提供以下靜態方法,包括加減乘除和四舍五入:
publicstaticdoubleadd(doublev1,doublev2)
publicstaticdoublesub(doublev1,doublev2)
publicstaticdoublemul(doublev1,doublev2)
publicstaticdoublediv(doublev1,doublev2)
publicstaticdoublediv(doublev1,doublev2,intscale)
publicstaticdoubleround(doublev,intscale)
Java中的簡單浮點數類型float和double不能夠進行運算。不光是Java,在其它很多編程語言中也有這樣的問題。在大多數情況下,計算的結果是準確的,但是多試幾次(可以做一個循環)就可以試出類似上面的錯誤。現在終于理解為什么要有BCD碼了。如果大家還想了解更多與之有關的信息,歡迎關注我們文軍營銷的官網。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業務請撥打電話 400 685 0732