損失精度
回答
4.35不能準確地表示爲浮動因爲0.35不是2的(負)冪。因此,這種或那種方式有一點舍入。當你乘以100時,可能還會有四捨五入的結果。如果結果數字少於435,則投射到int將佔據它的底部,即434.
如果您想輪到NEAREST integer,你可以在結果中加0.5,然後轉換爲int。這是對數字進行舍入的最普通的方式,儘管Java內置了四捨五入的實現。
double f = 4.35;
int n = (int) (100 * f + 0.5);
您需要觀看此視頻。我做了第一年的單身學生看作業。 http://vimeo.com/7403673 - Jon Skeet和託尼小馬。
喬恩斯基特的介紹在倫敦堆棧溢出DevDays事件:stackoverflow.carsonified.com
在6點50分左右,他談到了在Java中數學和所面臨的一些開發人員關於數學的共同問題。
沒有某種總結就沒有答案。 –
如果我沒有找到視頻如此有趣,我會低估你的答案:) – devsnd
試試這個:
double f = 4.35;
int n = (int) Math.round(100 * f);
現在n
將具有價值435
,符合市場預期。處理基數2中表示的十進制值時出現這種問題是因爲舍入誤差,請查看此參考以瞭解更多信息:What Every Computer Scientist Should Know About Floating-Point Arithmetic。
這是因爲浮點數內部基2中表示,以免基部10
這這裏將幫助(必須導入Math
):
double f = 4.35;
long n = Math.round(100 * f);
- 1. 損失精度
- 2. 精度損失?
- 3. 精確度損失
- 4. 損失的精度熊貓
- 5. 浮標精度損失
- 6. 鑄造損失精度[-fpermissive]
- 7. 春季queryForLong - 精度損失
- 8. 可能會損失精度?
- 9. 損失的精度:+與+ =
- 10. 損失的精度 - Java的
- 11. 損失的精度從雙
- 12. 損失精度計算度兩點
- 13. 從C#到SQL Server的精度損失
- 14. Django十進制精度損失
- 15. XYSeries自動調整精度損失?
- 16. Python Cassandra浮動精度損失
- 17. 的Math.random()與精度損失好奇心
- 18. C#精度損失除以雙
- 19. 其中BC損失精度shell腳本
- 20. Lua的小數精度損失
- 21. C#double至十進制精度損失
- 22. Xcode 5.1 NSInteger int,精度損失
- 23. C++浮點精度損失:3015/0.00025298219406977296
- 24. Seven_segment可能的損失精度
- 25. 要顯示而不損失精度圓
- 26. 當從雙精度轉換爲浮點時檢測精度損失
- 27. 警告:隱式轉換損失整數精度在Xcode 6
- 28. 控制精度溢出和損失,同時乘以雙打
- 29. openpyxl:從Excel中讀取浮點精度的損失?
- 30. 詮釋到浮點數轉換精度損失
[每個計算機科學家都應該知道的浮點算術](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 – Oded