C# 乘法中的浮點精確度問題
讓我們檢查一下 C# 程式碼片段:
<code class="language-csharp">double i = 10 * 0.69;</code>
雖然您預期 i
等於 6.9,但實際輸出通常是 6.8999999999999995。這種差異是由 .NET 框架內浮點運算的固有限制所引起的。
浮點數與十進制數不同,是使用二進位格式表示的。 這種二進位表示法意味著某些十進制值,包括那些具有無限重複小數部分的值(例如 0.69),無法完美地表示。相反,它們是近似值。
編譯器意識到了這個限制,經常透過直接儲存 6.9 的近似值來最佳化計算,而不是在運行時計算 10 * 0.69
。 這種近似解釋了觀察到的細微差異。
為了獲得更高的準確性,特別是在金融應用程式中,請考慮使用 decimal
資料類型。 decimal
採用以 10 為基數的表示形式,提供更精確的十進制數表示,例如 0.69,從而最大限度地減少與二進制浮點運算相關的捨入誤差。
以上是為什麼 C# 中 10 * 0.69 不等於 6.9?的詳細內容。更多資訊請關注PHP中文網其他相關文章!