Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的浮点舍入_Python_Python 3.x - Fatal编程技术网

python中的浮点舍入

python中的浮点舍入,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.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为基数思考,计算机以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