加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 为什么round(2.49999999999999992)返回3

发布时间:2020-12-20 11:28:58 所属栏目:Python 来源:网络整理
导读:我正在研究数学课程,我有一个很大的问题.所以在我的程序做了一些数学运算后,它会对结果进行舍入. 一切正常但如果结果== 2.49999999999999992,圆函数返回3.0而不是2.0. 我该如何解决这个问题? 谢谢. 解决方法 正如@Pavel Anossov在他的评论中所说的那样,在IE
我正在研究数学课程,我有一个很大的问题.所以在我的程序做了一些数学运算后,它会对结果进行舍入.

一切正常但如果结果== 2.49999999999999992,圆函数返回3.0而不是2.0.

我该如何解决这个问题?

谢谢.

解决方法

正如@Pavel Anossov在他的评论中所说的那样,在IEEE 754,2.49999999999999992 == 2.5中没有2.49999999999999992这样的东西.浮点数对于你的计算可能总是至关重要的,因为在任何情况下(32/64/128位漂浮),你都有精度限制.这显然也限于 Python浮点数.

有不同的选择可以解决这个问题,例如你可以使用decimal库:

>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

在这种情况下,可以自己设置精度. decimal在标准库中.

还有第三方库,如bigfloat,你可以使用(我没有经验):

>>> from bigfloat import *
>>> sqrt(2,precision(100))  # compute sqrt(2) with 100 bits of precision

但正如您所看到的,您总是必须选择精度.如果您真的不想丢失任何精度,请使用fractions(也在标准库中):

>>> from fractions import Fraction
>>> a = Fraction(16,-10)
>>> a
Fraction(-8,5)
>>> a / 23
Fraction(-8,115)
>>> float(a/23)
-0.06956521739130435

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读