python中的浮点舍入
为什么取整1.45,1给出1.4,但当我尝试取整2.45,1时,它给出2.5而不是2.4,正如它所宣称的,您可以使用模块: 十进制模块支持快速正确舍入的十进制浮点运算 试试这个: 从十进制输入十进制 n1_45=十进制'1.45' n2_45=十进制'2.45' 打印圆1_45,1,2_45,1 输出: 1.4.2.4python中的浮点舍入,python,python-3.x,Python,Python 3.x,为什么取整1.45,1给出1.4,但当我尝试取整2.45,1时,它给出2.5而不是2.4,正如它所宣称的,您可以使用模块: 十进制模块支持快速正确舍入的十进制浮点运算 试试这个: 从十进制输入十进制 n1_45=十进制'1.45' n2_45=十进制'2.45' 打印圆1_45,1,2_45,1 输出: 1.4.2.4 原因是浮点在内部的存储方式。根据,浮点将四舍五入到下一个有效值 为什么这些值会四舍五入到1.4和2.5应该是显而易见的 这里最大的问题是人类如何思考与计算机如何计算:人类以10为
原因是浮点在内部的存储方式。根据,浮点将四舍五入到下一个有效值 为什么这些值会四舍五入到1.4和2.5应该是显而易见的 这里最大的问题是人类如何思考与计算机如何计算:人类以10为基数思考,计算机以2为基数思考。在基数2中,1.45是一个具有无限位数的数字,因此将四舍五入 如果要强制计算机在base 10中思考,可以使用库: 这可能仍然不是你想要的,因为在数学中,我们被教导四舍五入1.45将导致1.5。您可以更改十进制的舍入行为,如下所示:
import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP
但是,请记住,计算机在基数2中的计算速度要比在基数10中快得多。这是一个表示错误。提示:打印“{0:.17f}”。format1.45和打印“{0:.17f}”。format2.45另请参见@Georgy Not quite。这是关于银行家的舍入,这不是这里真正的问题。@Georgy不,这仍然是银行家的舍入。以前还问过很多类似的问题:事实上,在数学中,大多数人都被教导,如果你舍入到0.5,就要舍入到下一个偶数。所以1.5和2.5都是2。这是因为,5是正好在中间,所以交易总额为$XX.XY5舍入将取决于Y的价值,给出了50/50个/公平的机会来上或下一分钱。你可以阅读一个更完整的解释。
1.449999999999999955591079014994
2.450000000000000177635683940025
from decimal import Decimal
print("{:.30f}".format(Decimal('1.45')))
print("{:.30f}".format(Decimal('2.45')))
print(round(Decimal('1.45'),1))
print(round(Decimal('2.45'),1))
1.450000000000000000000000000000
2.450000000000000000000000000000
1.4
2.4
import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP
1.450000000000000000000000000000
2.450000000000000000000000000000
1.5
2.5