为了账号安全,请及时绑定邮箱和手机立即绑定

如何将浮点数四舍五入到小数点后一位?

如何将浮点数四舍五入到小数点后一位?

拉风的咖菲猫 2019-10-18 10:32:19
假设我有8.8333333333333339,我想将其转换为8.84。如何在Python中完成此操作?round(8.8333333333333339, 2)给与8.83不8.84。我是Python或一般编程的新手。我不想将其打印为字符串,结果将被进一步使用。有关此问题的更多信息,请检查Tim Wilson的Python编程技巧:贷款和付款计算器。
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

8.833333333339(或8.833333333333334的结果106.00/12)正确舍入为小数点后两位8.83。从数学上来说,这听起来像是您想要的天花板功能。Python math模块中的一个名为ceil:


import math


v = 8.8333333333333339

print(math.ceil(v*100)/100)  # -> 8.84

地板和天花板函数通常分别将实数映射到小数位数为零的最大的前一个或最小的后整数–因此,将它们用于2个小数位,首先将数字乘以10 2(或100)即可将小数点后移点,然后除以它以进行补偿。


如果math由于某种原因不想使用该模块,则可以使用我刚刚编写的这个(经过最低测试的)实现:


def ceiling(x):

    n = int(x)

    return n if n-1 < x <= n else n+1

这如何适用于链接的贷款和付款计算器问题

//img1.sycdn.imooc.com//5da924500001e3e903640387.jpg

从样本输出中可以看出,他们对每月付款进行了四舍五入,这就是许多人所说的上限功能的效果。这意味着每个月略多于1 / 12的总量被支付。这样一来,末期付款就比平时少了一点,因此剩余的未付余额仅为8.76。


使用正常的四舍五入产生每月付款8.83和稍高的最终付款同样有效8.87。但是,在现实世界中,人们通常不希望增加自己的付款,因此对每笔付款进行四舍五入是常见的做法-还会更快地将钱退还给贷方。


查看完整回答
反对 回复 2019-10-18
?
慕容3067478

TA贡献1773条经验 获得超3个赞

这是正常现象(与Python无关),因为8.83不能完全表示为二进制浮点数,就像1/3不能完全以十进制表示(0.333333 ... ad infinitum)一样。


如果要确保绝对精度,则需要以下decimal模块:


>>> import decimal

>>> a = decimal.Decimal("8.833333333339")

>>> print(round(a,2))

8.83


查看完整回答
反对 回复 2019-10-18
?
HUWWW

TA贡献1874条经验 获得超12个赞

您想使用十进制模块,但还需要指定舍入模式。这是一个例子:


>>> import decimal

>>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_UP)

Decimal('8.34')

>>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)

Decimal('8.33')

>>> 


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 816 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信