Ger*_*ica 1 python rounding division
你好!考虑一下python中的以下内容:
import math
num = # Any float...
div = # Any float...
result_1 = math.floor(num / div)
result_2 = num // div
are_equal = result_1 == result_2
print(are_equal)
Run Code Online (Sandbox Code Playgroud)
我听说,无论and 的值are_equal如何True,都应该如此。numdiv
奇怪的是,我发现这种情况不成立:num = 146097.0和div = 365.2425。
这令人惊讶吗?有很多这样的例子吗?
为什么不(146097.0 // 365.2425) == math.floor(146097.0 / 365.2425)呢?
div不完全是365.2425;它是有理数3652425/10000的浮点近似值。
>>> 365.2425.as_integer_ratio()
(6425414011327611, 17592186044416) # Not (3652425, 10000) or (146097, 400)
Run Code Online (Sandbox Code Playgroud)
结果,该比率并非精确地为 400,但略微/接近四舍五入就变成了400 //。该Decimal类型提供任意精度,因此您可以看到使用由生成的近似值的效果365.2425:
>>> decimal.Decimal(365.2425)
Decimal('365.24250000000000682121026329696178436279296875')
>>> decimal.Decimal(146097) / decimal.Decimal(365.2425)
Decimal('399.9999999999999925296642496')
Run Code Online (Sandbox Code Playgroud)
如果使用字符串而不是浮点文字作为的参数Decimal,则将得到有理分母,该分母产生整数比400。(Decimal可以将字符串解析为精确的有理数,而不是以浮点开头该值已经是一个近似值。)
>>> decimal.Decimal(146097) / decimal.Decimal('365.2425')
Decimal('4E+2')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |