摘要:取整使用函數可以輕松的對浮點數進行取整操作。這是因為函數在應對這種與兩個整數距離相同的情況時,會取到最近的偶數上去。如果你特別需要精確的數值,那么可以使用模塊。
round()取整
使用round()函數可以輕松的對浮點數進行取整操作。示例如下:
>>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-0.36, 1) -0.4
round()第二個參數可以是負數:
>>> a = 13849 >>> round(a, -1) 12850 >>> round(a, -2) 13800
但是要注意,這里有兩個很奇怪的例子:
>>> round(2.5) 2 >>> round(0.5) 0
可以發現,這里完全沒有按照我們所熟悉的四舍五入的取整規則來。這是因為round()函數在應對這種與兩個整數距離相同的情況時,會取到最近的偶數上去。
同時官方文檔中還舉了一個例子,
Note The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information.
round(2.675, 2)的結果居然是2.67,這個的原因是浮點數表示是有誤差的,2.675在計算機上實際上不是準確的2.675。
解釋一下浮點數問題首先我們要明確一個概念,計算機只能識別二進制,也就是一堆1和0的組合,但是人類常用的卻是十進制。
十進制的數在計算機里就需要轉換成二進制表示,在將十進制整數轉為二進制的時候,往往是將原數不斷除以2,直到商小于1,將每一次得到的余數逆序排列,就能得到這個整數的二進制表示了。
到了小數部分,我們采用的是乘以2,取整數部分,直到小數部分為0,順序排列。但是有些特殊的數就要搞事情了。
0.1 * 2 = 0.2 => 0 0.2 * 2 = 0.4 => 0 0.4 * 2 = 0.8 => 0 0.8 * 2 = 1.6 => 1 0.6 * 2 = 1.2 => 1 0.2 * 2 = 0.4 => 0 0.4 * 2 = 0.8 => 0 0.8 * 2 = 1.6 => 1 ...
發現沒有,進入無限循環了,也就是說整數中一些小數,在二進制表示的時候是無限循環小數,但是在計算機中畢竟是用有限位來表示一個值的,這就造成了有些小數(浮點數)在計算機中是被截掉部分的,這就是浮點數不精確的原因啦。
decimal如果你特別需要精確的數值,那么可以使用decimal模塊。當然這是有性能代價的(有得必有失嘛)。
舉個例子:
>>> a = 4.2 >>> b = 2.1 >>> a + b 6.300000000000001 >>> (a+b) == 6.3 False # 這次試試decimal >>> from decimal import Decimal >>> a = Decimal("4.2") >>> b = Decimal("2.1") >>> a + b Decimal("6.3") >>> print(a+b) 6.3 >>> (a + b) == Decimal("6.3") True數值的輸出格式化
如果只是想讓數值以固定的位數輸出,那么是用不著round()的。
>>> a = 1.23456 >>> format(a, "0.2f") "1.23" >>> format(a, "0.3f") "1.234"
歡迎關注個人公眾號公子政的宅日常查看更多文章:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43961.html
摘要:浮點數計算不光對整數運算提供了支持,同樣對我們俗稱的小數也提供了便利的運算。但要注意的一點是有些版本對于浮點數是位數限制的對比下面兩張圖,所以可能會出現溢出或者未知報錯,在真正開發的過程中,盡量不要寫這種代碼否則背鍋。 學習任何一種編程語言,包括但不限于C、C++、Java、Python,我...
摘要:創建數值列表上一篇文章列表處理下一篇文章字典處理可以產生一些列數值語法開始下標包括結束下標不包括步長實例結果利用將產生的數值轉化為列表實例結果列表解析快速生成數值列表語法實例實例結果 Python創建數值列表 上一篇文章:Python列表處理下一篇文章:Python字典處理 1、range range()可以產生一些列數值語法:range(開始下標(包括),結束下標(不包括)[,步長...
摘要:下文統一稱為數組是存儲單一數據類型的多維數組同語言數組直接保存數值而則是能夠對數組進行處理的函數。動態數據類型與的數組和的這些不可變數據類型的適用場景等可變數據類型適用于需要不斷對原始數據進行修改的場景。 showImg(https://segmentfault.com/img/remote/1460000018925396);Numpy,是python中的一個矩陣計算包,功能類似ma...
摘要:最近使用處理一些網絡相關的問題,被相關的一系列編碼問題搞得一頭霧水。與接下來是中對于字符串的處理。中的和在中,其類型規定了底層的數據結構,是位整數串,也即跟語言中的字符串類似。這些問題在中得到解決。 最近使用 Python 2 處理一些網絡相關的問題,被 Unicode, String 相關的一系列編碼問題搞得一頭霧水。在這里整理一下相關的概念吧。 ASCII Unicode UTF8...
摘要:程序用于在編程社群的成員之間交流這些想法。在編程中,我們處理兩種元素函數和數據。在中,我們可以使用賦值語句來建立新的綁定,它包含左邊的名稱和右邊的值。例如,它并不能處理賦值語句。這些圖解的必要部分是函數的表示。 1.2 編程元素 來源:1.2 The Elements of Programming 譯者:飛龍 協議:CC BY-NC-SA 4.0 編程語言是操作計算機來執行任務...
閱讀 1166·2021-11-22 15:22
閱讀 3837·2021-10-19 13:13
閱讀 3570·2021-10-08 10:05
閱讀 3292·2021-09-26 10:20
閱讀 2984·2019-08-29 14:21
閱讀 2192·2019-08-27 10:55
閱讀 1871·2019-08-26 10:31
閱讀 2578·2019-08-23 16:47