」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼浮點數捨入的結果令人驚訝?

為什麼浮點數捨入的結果令人驚訝?

發佈於2024-11-04
瀏覽:561

Why Does Float Rounding Surprise with Even Results?

半浮點數舍入困境

使用 round() 函數遇到奇怪的情況?觀察以下行為:

for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))

您可能期望浮點值始終向上舍入,但令人驚訝的是它們舍入到最接近的偶數。

行為背後的原因

數位類型的文件透過聲明「round(x[, n]) x四捨五入到n位數,四捨五入到一半來澄清這種特殊行為甚至。銀行家舍入不是持續向上或向下舍入,這會放大捨入誤差,而是透過瞄準最接近的偶數來補償。

受控舍入解決方案

精確處理舍入,利用十進位模組。此模組為您提供了指定特定舍入策略的選項。例如,要從一半向上捨入:

>>> from decimal import localcontext, Decimal, ROUND_HALF_UP
>>> with localcontext() as ctx:
...     ctx.rounding = ROUND_HALF_UP
...     for i in range(1, 15, 2):
...         n = Decimal(i) / 2
...         print(n, '=>', n.to_integral_value())
...
0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
版本聲明 本文轉載於:1729151236如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • Python 變數:命名規則和型別推斷解釋
    Python 變數:命名規則和型別推斷解釋
    Python 是一種廣泛使用的程式語言,以其簡單性和可讀性而聞名。了解變數的工作原理是編寫高效 Python 程式碼的基礎。在本文中,我們將介紹Python變數命名規則和類型推斷,確保您可以編寫乾淨、無錯誤的程式碼。 Python變數命名規則 在Python中命名變數時,必須遵循一...
    程式設計 發佈於2024-11-08
  • 如何同時有效率地將多個欄位新增至 Pandas DataFrame ?
    如何同時有效率地將多個欄位新增至 Pandas DataFrame ?
    同時向Pandas DataFrame 添加多個列在Pandas 資料操作中,有效地向DataFrame 添加多個新列可能是一項需要優雅解決方案的任務。雖然使用帶有等號的列列表語法的直覺方法可能看起來很簡單,但它可能會導致意外的結果。 挑戰如提供的範例所示,以下語法無法如預期建立新欄位:df[['c...
    程式設計 發佈於2024-11-08
  • 從開發人員到資深架構師:技術專長與奉獻精神的成功故事
    從開發人員到資深架構師:技術專長與奉獻精神的成功故事
    一個開發人員晉升為高級架構師的真實故事 一位熟練的Java EE開發人員,只有4年的經驗,加入了一家跨國IT公司,並晉升為高級架構師。憑藉著多樣化的技能和 Oracle 認證的 Java EE 企業架構師,該開發人員已經證明了他在架構領域的勇氣。 加入公司後,開發人員被分配到一個項目,該公司在為汽...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 8.1 中有條件地將元素新增至關聯數組?
    如何在 PHP 8.1 中有條件地將元素新增至關聯數組?
    條件數組元素添加在 PHP 中,有條件地將元素添加到關聯數組的任務可能是一個挑戰。例如,考慮以下數組:$arr = ['a' => 'abc'];我們如何有條件地添加'b' => 'xyz'使用array() 語句對此陣列進行運算?在這種情況下,三元運算子不是一...
    程式設計 發佈於2024-11-08
  • 從打字機到像素:CMYK、RGB 和建立色彩視覺化工具的旅程
    從打字機到像素:CMYK、RGB 和建立色彩視覺化工具的旅程
    當我還是個孩子的時候,我出版了一本關於漫畫的粉絲雜誌。那是在我擁有計算機之前很久——它是用打字機、紙和剪刀創建的! 粉絲雜誌最初是黑白的,在我的學校複印的。隨著時間的推移,隨著它取得了更大的成功,我能夠負擔得起帶有彩色封面的膠印! 然而,管理這些顏色非常具有挑戰性。每個封面必須列印四次,每種顏色...
    程式設計 發佈於2024-11-08
  • 如何將 Boehm 的垃圾收集器與 C++ 標準函式庫整合?
    如何將 Boehm 的垃圾收集器與 C++ 標準函式庫整合?
    整合 Boehm 垃圾收集器和 C 標準庫要將 Boehm 保守垃圾收集器與 C標準庫集合無縫集成,有兩種主要方法:重新定義運算符::new此方法涉及重新定義運算符::new以使用Boehm的GC。但是,它可能與現有 C 程式碼衝突,並且可能無法在不同編譯器之間移植。 明確分配器參數您可以使用而不是...
    程式設計 發佈於2024-11-08
  • 如何優化子集驗證以獲得頂級效能?
    如何優化子集驗證以獲得頂級效能?
    優化子集驗證:確保每一位都很重要確定一個清單是否是另一個清單的子集的任務在程式設計中常遇到。雖然交叉列表和比較相等性是一種簡單的方法,但考慮效能至關重要,尤其是對於大型資料集。 考慮到這種情況,需要考慮的一個關鍵因素是任何清單在多個測試中是否保持不變。由於您的場景中的其中一個清單是靜態的,因此我們可...
    程式設計 發佈於2024-11-08
  • 如何處理超出 MySQL BIGINT 限制的大整數?
    如何處理超出 MySQL BIGINT 限制的大整數?
    超出MySQL BIGINT 限制的大整數處理超出MySQL BIGINT 限制的大整數處理MySQL 的BIGINT 資料型別可能看起來是最廣泛的整數表示形式,但在處理時會出現限制超過20 位的數字。 超出BIGINT 的選項邊界當儲存需求超出BIGINT的能力時,會出現兩個選項:儲存為VARCH...
    程式設計 發佈於2024-11-08
  • 如何確保 Python Selenium 中載入多個元素?
    如何確保 Python Selenium 中載入多個元素?
    Python Selenium:確保多個元素載入透過AJAX 處理動態載入的元素時,確認其外觀可能具有挑戰性。為了處理這種情況,我們將利用 Selenium 的 WebDriverWait 及其各種策略來確保多個元素的存在。 所有元素的可見性:驗證所有與特定選擇器匹配的元素,我們可以使用visibi...
    程式設計 發佈於2024-11-08
  • 了解 JavaScript 中的標記模板文字
    了解 JavaScript 中的標記模板文字
    什麼是標記模板文字? 帶有標籤的模板文字涉及以函數為前綴的模板文字,稱為標籤。此函數可以處理和操作文字的內容。這是一個簡單的例子: function tag(strings, ...values) { console.log(strings); console.lo...
    程式設計 發佈於2024-11-08
  • 二指針演算法解釋
    二指針演算法解釋
    我想解釋一個簡單有效的技巧,你可以在面試中處理數組、字串、鍊錶等時使用它。這也將提高你對這些數據的基礎知識結構。 讓我們從理論開始。該演算法有兩個常見用例: left/right 這個演算法的中心概念是有兩個整數變量,它們將從字串或數組的兩側移動。通常,人們稱之為左和右。左邊將從0索引移動到長度-...
    程式設計 發佈於2024-11-08
  • 如何消除Python列印語句中的空格?
    如何消除Python列印語句中的空格?
    在 Python 列印語句中刪除空格在 Python 中,列印多個項目通常會導致出現意外的空格。可以使用 sep 參數消除這些空格來解決此問題。例如,考慮這個:print("a", "b", "c")此輸出將包含空格:a b c要消除它們:...
    程式設計 發佈於2024-11-08
  • 具有樣式和變體的 Flexbox 按鈕
    具有樣式和變體的 Flexbox 按鈕
    该按钮使用 CSS Flexbox 进行样式化,包括主要、次要和第三级样式,所有这些样式都在嵌套 CSS 中构建,以提高清晰度和可维护性,其变化形式如下: 带文字 带有文字和图标(左/右/左&右) 只有图标 状态 全角 残疾人类型 HTML代码: <a href="#" class="sf-b...
    程式設計 發佈於2024-11-08
  • 如何使用 PHP 在 Windows 電腦上安裝 SSH2 擴充功能?
    如何使用 PHP 在 Windows 電腦上安裝 SSH2 擴充功能?
    在 Windows 電腦上使用 PHP 安裝 SSH2 擴充在使用 Apache 的 Windows 電腦上安裝 SSH2 擴充功能需要 OpenSSL 和 libssh2 函式庫。這是逐步指南:1。取得 PHP SSH2 PECL 擴充:從此處下載 Win32 SSH2 PECL 擴展,確保選擇與...
    程式設計 發佈於2024-11-08
  • 如何在 Python 中有效捕捉程式輸出:超越基本解決方案
    如何在 Python 中有效捕捉程式輸出:超越基本解決方案
    捕獲程式輸出:超越樸素的解決方案捕獲程式輸出:超越樸素的解決方案# writer.py import sys def write(): sys.stdout.write("foobar")在Python腳本中,捕獲程式輸出以進行進一步處理是一種常見的需求。雖然幼稚的解決方...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3