python 四舍五入
- i = 1.35 float類型 主要屬於不精確數 原因:float是二進制存儲 實際存儲:1.350000000000000088817841970012523233890533447265625
- i = 1 int類型 屬於精確數
- i = decimal.Decimal('1.23') decimal 專用10進制精確數
- i = 1.5 一位小數,且小數為5 是float,但是精確數,二進制能夠精確表示 1.5
- int 和 decimal 可以運算 float 和 decimal 不能
- 四舍五入,整體上會導致數據偏高
- 舍(1,2,3,4) 入(5,6,7,8,9) 不變(0),從概率來講入的多一些
- 舍(1,2,3,4) 入(6,7,8,9) 不變(0) 平均(5) 為了更公平,5采取平均的方式 “奇取偶舍” 需要舍位的前一位,就是5的前一位,如果是奇數就入,偶數則舍
- 尾數剛好是5才會這樣選擇,如果要舍棄的是兩位,比如2.51,2.51明顯離2近一點,就選擇入
- round(1.5) 2 round(2.5) 2
- round(decimal('1.35')) 1.4 奇數就入,偶數則舍
- 上面的數字是精確數,而不精確數由於本身轉為10進制數時就多了或少了 (四舍五入對應的是10進制數)
- 比如1.35 1.350000000000000088817841970012523233890533447265625 明顯大於5,要入
- 不精確類型的四舍五入
- round(1.35, 1) 1.4
總結:
- 四舍五入 是對十進制數來說,所以float要轉成10進制數才有意義
- 四舍五入 是看數字距離哪個更近,與我們平時只看舍棄的最近一位不同 ROUND_HALF_EVEN策略
- 1.51 平時只關心十分位,而python要更精確