回答
Floats具有非常低的精度高(3十億+)號。
浮球的精度在0-1範圍內是最好的。你從零開始越遠,精度就越低。在30億左右,它不足以保存每一個整數(所以它可以代表最接近的值)。
解決方案:使用double(或decimal representation)。
各種浮點類型表示的準確性因其大小而異。對於32位浮點數,您可以期望大約7位數的精度。對於雙數是大約16位數字。
我強烈建議閱讀浮點表示和各種優缺點。從長遠來看,它會爲您節省很多麻煩,特別是當比較之類的事情不像您期望的那樣有效時。
32位浮點數爲23位,尾數爲8,388,608個不同的值。這意味着精確度大約是7位十進制數字。您的電話號碼有8位十進制有效數字,因此您會看到最後一位有效數字中的精度損失。
Here's More information on float representation
雙精度是64位,並具有52比特用於其是4,503,599,627,370,496(16位號碼)的尾數,並因此具有大致15-16十進制數字的準確性。
A decimal
類型是可能允許您以任何準確度保存任何數量的任意長度的東西。 C#擁有它們,但不幸的是,它們不是C++中的原始類型。你也許可以找到一些第三方庫,用C++實現它們。
實際上,由於隱藏位,它是24位:標準化數字爲1,非標準化數字爲0。 – fredoverflow 2011-02-16 09:55:56
浮點算術已經聲稱另一個受害者!它似乎被它咬了一口,對每一個程序員來說都是一些禮儀。 :) – 2011-02-16 09:49:55
- 1. 鑄造目的-1到uint32?
- 2. 鑄造價值浮動返回零
- 3. 減「1」
- 4. LLVM IR浮點數鑄造
- 5. 浮法靜態鑄造部門
- 6. 浮點值等於-1。#IND
- 7. 鑄造指針浮動
- 8. 野牛語法(減少1 /減1個移位/縮小)
- 9. 當鑄造類'無法鑄造'錯誤
- 10. 鑄造爲int和浮點錯誤?
- 11. 奇怪行爲,當鑄造numpy.float64漂浮
- 12. 無法做鑄造
- 13. 錯誤值鑄造float時(24)值浮動(53)在SQL 2005
- 14. 鑄造大NSInteger的浮動問題
- 15. 鑄造盒裝值
- 16. PIG - HBASE - 鑄造值
- 17. 爲什麼「-1」不能減1?
- 18. 從函數指針中減1 1
- 19. .val(this.value);減號1
- 20. 日期減1年?
- 21. 的QlikView - 減1年
- 22. (浮動)鑄造不起作用
- 23. 鑄造用ado.net和剃刀浮子attribut
- 24. 從 'System.Int32' 到「System.Nullable`1無效鑄造[[System.Int32,mscorlib程序]]
- 25. 線程1個信號SIGABRT碰撞鑄造的UIView到SKView
- 26. 關於鑄造-1 to size_t導致卡住的循環
- 27. 浮動值澆鑄到char
- 28. 如何區分1和零浮點值?
- 29. 在java中乘以-1的浮點值
- 30. 獲取元素值,然後減1?
的OP的數量只有約33億美元。 – Mephane 2011-02-16 09:40:43