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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |