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要更精确