欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

為什么java的BigDecimal也無法精準計算double類型嗎?

傅智翔2年前10瀏覽0評論

不要使用double來構造一個BigDcimal對象。BigDecimal的構造函數有這么一段說明:

  1. Theresultsofthisconstructorcanbesomewhatunpredictable.OnemightassumethatwritinginJavacreatesawhichisexactlyequalto0.1(anunscaledvalueof1,withascaleof1),butitisactuallyequalto0.1000000000000000055511151231257827021181583404541015625.Thisisbecause0.1cannotberepresentedexactlyasa(or,forthatmatter,asabinaryfractionofanyfinitelength).Thus,thevaluethatisbeingpassedintotheconstructorisnotexactlyequalto0.1,appearancesnotwithstanding.
  2. Theconstructor,ontheotherhand,isperfectlypredictable:writingcreatesawhichisexactlyequalto0.1,asonewouldexpect.Therefore,itisgenerallyrecommendedthattheStringconstructorbeusedinpreferencetothisone.

由于double本身是不精確的,如果使用double作為構造函數參數,也會導致BigDecimal對象不精確,比如使用浮點數0.1來構造一個BigDecimal對象,它的實際值為0.1000000000000000055511151231257827021181583404541015625,所以,需要精確計算的場景,推薦使用String類型的構造函數。

總之,在需要精確浮點數計算的場景,不要在任何地方使用double,float類型的變量,應該使用String類型來創建BigDecimal.