课程作业02——课程中的动手动脑问题
1.為什么double類型的數(shù)值進(jìn)行運(yùn)算得不到“數(shù)學(xué)上精確”的結(jié)果?
結(jié)論:使用double類型的數(shù)值進(jìn)行計算,其結(jié)果是不精確的。
原因:double類型的數(shù)值占用64bit,即64個二進(jìn)制數(shù),除去最高位表示正負(fù)符號的位,在最低位上一定會與實際數(shù)據(jù)存在誤差(除非實際數(shù)據(jù)恰好是2的n次方)。我們給出的數(shù)值,在大多數(shù)情況下需要比64bit更多的位數(shù)才能準(zhǔn)確表示出來(甚至是需要無窮多位),而double類型的數(shù)值只有64bit,后面舍去的位數(shù)一定會帶來誤差,無法得到“數(shù)學(xué)上精確”的結(jié)果。
2.解決精度問題可以使用使用BigDecimal類,但在構(gòu)建BigDecimal對象時應(yīng)使用字符串而不是double數(shù)值,否則,仍有可能引發(fā)計算精度問題解決方法
原因:double并不能準(zhǔn)確的代表BigDecimal 16位有效數(shù)以上的數(shù)字在使用BigDecimal時創(chuàng)建對象。而BigDecimal所創(chuàng)建的對象不能使用+-*/等傳統(tǒng)的算術(shù)運(yùn)算符直接對其對象進(jìn)行數(shù)學(xué)運(yùn)算,必須調(diào)用相對應(yīng)的(f1.add(f2))等方法。 因為方法中的參數(shù)必須是BigDecimal的對象,所以定義時應(yīng)為字符串。
3.以下代碼的輸出結(jié)果是什么?
結(jié)果:
原因:因為輸出的是字符串,在語句一中,“+”直接連接兩個字符,所以分別輸出100和200;而在語句二中,“+”先是進(jìn)行數(shù)值類型的求和運(yùn)算,再用字符串輸出兩個整形的和。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wxd136/p/7634279.html
總結(jié)
以上是生活随笔為你收集整理的课程作业02——课程中的动手动脑问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用电线来传网络信号的黑科技?AirGig
- 下一篇: 《重构-改善既有代码设计》读书笔记-重构