1. 程式人生 > >課程作業02——課程中的動手動腦問題

課程作業02——課程中的動手動腦問題

作業02 無法 cnblogs 數值 計算 mage 情況 課程作業 有效

1.為什麽double類型的數值進行運算得不到“數學上精確”的結果?

技術分享

技術分享

結論:使用double類型的數值進行計算,其結果是不精確的。

原因:double類型的數值占用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上一定會與實際數據存在誤差(除非實際數據恰好是2的n次方)。我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。

2.解決精度問題可以使用使用BigDecimal類,但在構建BigDecimal對象時應使用字符串而不是double數值,否則,仍有可能引發計算精度問題解決方法

技術分享

技術分享

原因:double並不能準確的代表BigDecimal 16位有效數以上的數字在使用BigDecimal時創建對象。而BigDecimal所創建的對象不能使用+-*/等傳統的算術運算符直接對其對象進行數學運算,必須調用相對應的(f1.add(f2))等方法。 因為方法中的參數必須是BigDecimal的對象,所以定義時應為字符串。

3.以下代碼的輸出結果是什麽?

技術分享

結果:

技術分享

原因:因為輸出的是字符串,在語句一中,“+”直接連接兩個字符,所以分別輸出100和200;而在語句二中,“+”先是進行數值類型的求和運算,再用字符串輸出兩個整形的和。

課程作業02——課程中的動手動腦問題