round 的规则

在python中round 是用于计算小数位截取的功能,如果保留12.34 小数点后一位,round(12.34,1)或round(12.34),得到12.3,一般是4舍6六入,这个固定的规则,当截取的后一位是5的时候,要看计算机的浮点数值保存方式,在python 中,取决于计算机浮点的保存的值有没有比要计算的值大,有的话,就是入1,没有就舍弃,比如:

from decimal import Decimal
Decimal(12.55)

输出值可能是这样Decimal('12.550000000000000710542735760100185871124267578125')

所以,round(12.55,1) 得到的值是12.6

但是

Decimal(1.25)

输出值是Decimal('1.25')

所以round(1.25,1) 的到的值就是1.2

再来一个计算机存值比显示的值小的

Decimal(1.45)

输出值是Decimal('1.4499999999999999555910790149937383830547332763671875')

所以round(1.45,1) 是1.4

 

### Round 函数的取整规则与用法 #### 基本定义 `round()` 是一种用于对浮点数进行四舍五入的操作函数。它的语法形式如下: ```python round(number[, ndigits]) ``` - `number`: 待处理的数值。 - `ndigits`: 可选参数,指定了需要保留的小数位数或者整数位数。当未提供此参数时,默认为 0,即返回最接近的整数[^1]。 #### 参数详解 1. **正数 `ndigits`** 当 `ndigits` 大于零时,`round()` 将按照指定的小数位数执行四舍五入操作。例如: ```python round(3.14159, 2) # 结果为 3.14 ``` 2. **零值 `ndigits`** 若 `ndigits` 等于零,则会将输入数值四舍五入至最近的整数[^2]。例如: ```python round(7.8) # 结果为 8 round(-7.8) # 结果为 -8 ``` 3. **负数 `ndigits`** 对于小于零的情况,意味着该函数将在小数点左侧的位置上实施四舍五入,并通过零来填补相应的位数。这使得我们可以轻松地针对较大单位(如十、百等)做近似处理[^1]。实例展示如下: ```python round(123.456, -1) # 输出结果为 120 round(123.456, -2) # 输出结果为 100 ``` #### 特殊情况说明 由于计算机内部存储机制的原因,在某些特定条件下可能会出现不符合常规认知的结果。比如下面这个例子展示了即使理论上应该向上进一位却依旧保持原样的现象[^3]: ```python print(round(2.675, 2)) # 显示为 2.67 而非预期中的 2.68 ``` 这是因为在二进制浮点数表达体系下无法精确表示所有的十进制分数所致;更多详情可以查阅官方文档有关浮点运算章节的内容链接地址。 另外值得注意的一点是在不同的 Python 版本之间也存在细微差别——特别是在如何对待恰好位于两个可能输出中间位置的数据方面。具体而言就是说在 Python 2 和 Python 3 中对于像 half-way cases 这样既靠近前一整数又邻接下一整数的情形采取了略微有所区别的策略[^4]: - 在 Python 2 下面遇到 .5 的时候总是倾向于朝向更大的方向移动; - 到达 Python 3 后改成了遵循所谓的银行家算法 (banker's rounding),也就是优先考虑偶数端点作为最终答案。 综上所述,理解并掌握这些潜在陷阱有助于开发者们更加准确高效地运用这一内置工具完成各类数据加工需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值