tft每日頭條

 > 生活

 > round函數怎樣四舍五入

round函數怎樣四舍五入

生活 更新时间:2024-11-27 00:50:30

round函數怎樣四舍五入(3.675若采用round四舍五入)1

計算

一、一般情況。round(number[, ndigits])函數返回number舍入到小數點後ndigits位精度的值,比如:

round(3.14, 1)

3.1

如果ndigits被省略或為None,則返回最接近number的整數,除此之外,返回值與number的類型一緻。

round(3.14, None)

3

round(3.14, 0) # 不是被省略,也不是None

3.0

看看ndigits為負數的情況,同樣,結果會被舍入到最接近10的負ndigits次幂的倍數。(負負得正,會對整數位進行舍入)

round(314, -1)

310

二、特殊情況。若number離前後的有效數距離相等時,比如0.5,若保留整數部分,很顯然,其離0和離1的距離一樣,這個時候round會如何取舍呢?先看看下面實際的運行結果情況:

round(0.5) # 離0和1的距離相等

0

round(-0.5) # 離0和-1的距離相等

0

round(1.5) # 離1和2的距離相等

2

round(2.5) # 離2和3的距離相等

2

round的規則是這樣的(python3版本):選擇偶數!上面的結果也印證了這一規則。

三、失真情況。一些十進制小數在計算機中無法用二進制精确表示,存在失真,比如3.675,在計算機中的二進制數接近如下情況:

print(f'{3.675:.20f}')

3.67499999999999982236

所以,如果我們采用round函數保留2位小數的話,很顯然,計算機認為更接近3.67,驗證一下:

round(3.675, 2) # 雖然看起來與3.67、3.68的距離相同

3.67

簡單解釋一下因為進制轉換導緻的失真,比如,三分之一,在我們十進制世界裡就無法用小數精準表示,即使寫成0.33333333,後面加再多的3,依然存在誤差。但是在三進制世界裡,卻可以精準地表示為0.1。

總結:

  • round函數與我們現實中的四舍五入規則不一樣;
  • round函數一直在盡量接近公平,在保留有效位時,會選擇離其最近的數;
  • 但由于存在進制轉換的失真,導緻計算遠近的時候,可能與我們在十進制世界看到的情況不一樣;
  • 若離兩邊數的距離完全相等時,round函數選擇偶數;
  • 由于round函數的規則比較偏技術,所以一般用在對有效位誤差要求不太高的地方,對于有嚴格精度和規則要求的地方,建議使用decimal模塊。

小補充,針對編程小白人員:

round(3.004, 2)

3.0

我要的是保留2位小數,為啥輸出的隻有一位小數呢?round是不是搞錯了?!這裡确實冤枉round函數了,round函數按照前面講的規則計算出結果後,對尾部的非有效位确實清0了,然後函數以浮點數或整數返回,對于返回的結果若用于運算,不會有任何問題,但我們上面看到的“3.0”是格式化打印顯示,屬于數值的格式化輸出範疇,跟round沒有關系。更深入一步,round函數也僅對尾部的非有效位清0,而不是真正的截斷,一方面,對于數值運算不影響,另一方面,計算機中數值運算的有效位是固定的,就是咱們經常提到的32位或64位(二進制位)。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved