python round()函数保留小数位数的详细用法及round函数的坑

round(number[, ndigits])
返回number舍入到小数点后ndigits为精度的值,如果ndigits被省略则会返回最接近输入值的整数

强调:round()的舍入规则不是四舍五入
强调:round()的舍入规则不是四舍五入
强调:round()的舍入规则不是四舍五入

舍入的规则
官方定义:结果值会舍入至最接近的 10 的负 ndigits 次幂的倍数;如果与两个倍数同样接近,则选用偶数。
有点不好理解,换一种理解方式
结果值 = 与number 最接近的拥有ndigits位小数的小数 。如果距离相等,则选择小数点第ndigits位是偶数的小数

  • 如果不填ndigits 则保留整数部分 当出现距离相等的情况,则看整数末尾,最后结果靠近整数末尾是偶数的
    round(number)
    number在[1.5,2.5] 的值结果为2 1.5距离1和距离2相等,2是偶数所以结果是2,2.5距离2和距离3相等,2是偶数所以结果是2
    number在 (2.5,3.5) 的值结果为3 在这个范围中的距离3最近所以结果为3
    number=3.5 保留结果为4(3.5距离3和距离4都为0.5 因为4是偶数,所以最后的结果是4)
    在这里插入图片描述
    特别注意:round(0.5) 和 round(-0.5) 均得出 0
  • 如果有指定的ndigit值,则会保留对应的小数位方法和整数的相同
  • 结果值等于和原值小数最接近的拥有ndigits位小数的值,如果距离相等选择小数点第ndigits位是偶数的值
a = 2.465 # 舍入后 2.46     # 距离2.46和2.47一样近,2.46的末尾小数为偶数,则结果为2.46
b = 2.4651  # 舍入后 2.47   # 距离2.47较近
print(round(a,2))
print(round(b,2))

a = 2.464 # 舍入后 2.46   # 距离2.46最近
b = 2.467  # 舍入后 2.47  # 距离2,47最近
print(round(a,2))
print(round(b,2))

round()函数的坑

官方文档的例子

对浮点数执行 round() 的行为可能会令人惊讶:例如,round(2.675, 2) 将给出 2.67 而不是期望的 2.68。
这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。

因为所有的数据在计算机中都以二进制的形式进行存储,从十进制转化为二进制的过成中,会有精度的损失。
2.675转换成二进制以后在计算机存储的机器数要小于2.675 所以会导致结果和预期值不一样

如果想要精确度比较高的

  • 使用模块 decimal
    decimal可以调整小数点位数的进度

  • format函数转换成字符串,可以指定保留小数位数,保留规则为四舍五入

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中,使用round()函数可以将一个保留指定的小数位。如果不指定小数位(ndigits),则会返回最接近输入值的整。如果指定了小数位,结果值将会舍入到最接近的拥有指定小数位小数。 然而,需要注意的是,对浮点执行round()函数可能会出现一些意外的结果。这是由于大多十进制小数无法在浮点中以完全精确的方式表示。例如,round(2.675, 2)会返回2.67,而不是期望的2.68。这是因为2.675在浮点中无法精确地表示。 为了避免这种意外的情况,可以使用decimal模块来进行更精确的四舍五入操作。可以使用Decimal类来表示和处理浮点,并使用quantize()方法来指定小数位并进行舍入。 下面是使用round()函数保留两位小数的示例代码: ```python number = 2.465 rounded_number = round(number, 2) print(rounded_number) # 输出 2.46 number = 2.4651 rounded_number = round(number, 2) print(rounded_number) # 输出 2.47 number = 2.464 rounded_number = round(number, 2) print(rounded_number) # 输出 2.46 number = 2.467 rounded_number = round(number, 2) print(rounded_number) # 输出 2.47 ``` 在这个例子中,我们使用round()函数保留两位小数。对于2.465,它会被舍入为2.46,而对于2.4651,它会被舍入为2.47。同样,对于2.464,它会被舍入为2.46,对于2.467,它会被舍入为2.47。 请注意,虽然round()函数在大多情况下可以满足需求,但在进行精确的值计算时,建议使用decimal模块来处理浮点,以避免精度问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼干儿♛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值