将 2 个相同值的整数乘以 300 会产生不同的结果
multiplying 2 integers of the same value by 300 yields different results
我想弄清楚为什么当我决定乘法而不是除法时会出现 283 的差异。
这是来自我的终端的一些 Python 代码。如您所见,这两个变量都是整数,但取决于我是将一个变量除以另一个变量还是将另一个变量乘以另一个变量,该值会略有变化。
>>> type(times), times
(<type 'int'>, 1512296383)
>>> type(payout), payout
(<type 'int'>, 5040987)
>>> [times / 300 - payout, times - payout * 300]
[0, 283]
>>> [times / 300, payout, times, payout * 300]
[5040987, 5040987, 1512296383, 1512296100]
您正在执行 integer division,它会丢弃小数点后的所有内容。由于 times
不能被 300
整除,您将得到截断的结果。这是一种更简单的查看方式:
>>> 1512296383 / 300 * 300
1512296100
您的问题是在 Python 2.x 中,整数除法不是 return 精确的浮点结果。将一个值转换为浮点数表明除法不完全等于 300:
>>> float(1512296383)/5040987
300.0000561397996
因此,当您执行 1512296383/5040987
时,您将得到整数 300
,这将引入一个小错误。
我想弄清楚为什么当我决定乘法而不是除法时会出现 283 的差异。
这是来自我的终端的一些 Python 代码。如您所见,这两个变量都是整数,但取决于我是将一个变量除以另一个变量还是将另一个变量乘以另一个变量,该值会略有变化。
>>> type(times), times
(<type 'int'>, 1512296383)
>>> type(payout), payout
(<type 'int'>, 5040987)
>>> [times / 300 - payout, times - payout * 300]
[0, 283]
>>> [times / 300, payout, times, payout * 300]
[5040987, 5040987, 1512296383, 1512296100]
您正在执行 integer division,它会丢弃小数点后的所有内容。由于 times
不能被 300
整除,您将得到截断的结果。这是一种更简单的查看方式:
>>> 1512296383 / 300 * 300
1512296100
您的问题是在 Python 2.x 中,整数除法不是 return 精确的浮点结果。将一个值转换为浮点数表明除法不完全等于 300:
>>> float(1512296383)/5040987
300.0000561397996
因此,当您执行 1512296383/5040987
时,您将得到整数 300
,这将引入一个小错误。