我是C#的初學者,我正在使用浮點數。我需要在這兩個數字之間做減法,但它不起作用。我知道它是由浮點數引起的,但是我怎樣才能解決它,如果你是如此的優秀,你能解釋我爲什麼會發生?提前致謝。C#錯誤的減法? 12.345 - 12 = 0.345000000000001
回答
考慮使用十進制而不是浮動:
// Instead of this...
float a = 12.345F;
float b = 12;
float c = a - b;
// Use this:
decimal d = 12.345M;
decimal e = 12;
decimal f = d - e;
喬恩斯基特給出的這個答案兩種類型之間的區別了很好的解釋:https://stackoverflow.com/a/618596/446681
你究竟如何計算?
float a = 12.35F;
float b = 12.0F;
float ans = a - b; //0.350000381
double x = 12.35;
double y = 12.0;
double ans2 = x - y; //0.34999999999999964
decimal n = 12.35m;
decimal m = 12.0m;
decimal ans3 = n - m; //0.35
對我來說這些計算給出了正確的結果。
Thanks for decimal 。 – c0ntrol 2012-03-27 15:13:20
根據什麼你,你可以使用十進制類型,或按原樣存儲,但在顯示答案前輪一圈
這種行爲的良好來源不是ac#的問題,這是一個計算機科學問題。如果你想真正理解發生了什麼,請閱讀What Every Computer Scientist Should Know About Floating-Point Arithmetic。如果你只關心你爲什麼會遇到問題,那是因爲Float和Double在這個平臺上分別只能精確到7位和15位,並且你需要應用舍入邏輯來實現你正在尋找的結果。
擠壓無限多的實數成有限數目的比特 的要求的近似表示。雖然無限多個整數,但在大多數程序中,整數計算的結果可以以32位存儲。相比之下,給定任意固定位數,大多數使用實數的計算將產生不能使用那麼多位精確表示的數量。因此,浮點計算的結果必須經常按照 的順序進行四捨五入以適應其有限表示。該四捨五入錯誤是浮點計算的特徵 。 Goldberg 1991
感謝您的解釋。 – c0ntrol 2012-03-27 15:12:22
- 1. Oracle 12 C安裝錯誤
- 2. 錯誤12
- 3. afxtempl.h錯誤12錯誤C2143:語法錯誤:缺少';'在'}'之前
- 4. 錯誤C2143 VC++ 12
- 5. 日期減法錯誤
- 6. neo4j減少語法錯誤
- 7. 解析錯誤:語法錯誤,意外'回聲'(T_ECHO)在C:\ ...在線12
- 8. 由於錯誤,無法分配CursorWindow -12
- 9. 的WebLogic 12和XSLT錯誤
- 10. 期望語法錯誤./auto.sh ./auto.sh:第12行:意外令牌附近的語法錯誤}} ./auto.sh:line 12:`}'
- 11. 錯誤:第9行:* 12:語法錯誤:預計操作數
- 12. JVM崩潰,錯誤= '無法分配存儲器'(錯誤= 12)
- 13. Verilog簽名加法減法錯誤
- 14. 減法後得到錯誤的時間
- 15. Javascript中的簡單減法錯誤
- 16. 基本減法中的Python錯誤?
- 17. ASPLine 12主導航錯誤!
- 18. 錯誤:SYNTAX_ERR:DOM異常12
- 19. Visual C++ 2017 - 減少錯誤級別
- 20. 如何使用雙數據類型在C++中從50.5e-12中減去50e-12?
- 21. 解析錯誤:語法錯誤,意外的'其他'(T_ELSE)第12行的archive.php
- 22. C指針減法運算
- 23. 解析錯誤:語法錯誤,意外的')',期待'('在第12行的C:\ xampp \ htdocs \ res \ connection.php
- 24. 明確的專業化[MSVS '12:十一月'12 CTP:錯誤C3522]
- 25. 類似C語言的野牛移位/減少錯誤
- 26. 紅寶石陣列減法錯誤
- 27. 哈斯克爾減法錯誤
- 28. 錯誤Jsp添加減法數字
- 29. 張量減法返回錯誤值
- 30. 「無法解析的WSDL文件」的錯誤在PowerBuilder 12
你想要什麼,你的問題是什麼,請詳細說明你的問題..? – 2012-03-27 13:30:07
請發佈您的代碼。所有的變量都是浮動的嗎? – c0d3Junk13 2012-03-27 13:30:12
你可以發佈代碼嗎?主題中的計算看起來很奇怪。正常的浮點舍入不會導致這種行爲。 – CodesInChaos 2012-03-27 13:30:16