我希望a四舍五入到13.95.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
Run Code Online (Sandbox Code Playgroud)
该round功能不像我预期的那样工作.
我每天都在我的公司用Python 2.4工作.我使用了标准数学库中的多功能对数函数'log',当我输入log(2**31,2)时,它返回31.000000000000004,这让我感到有点奇怪.
我用2的其他力量做了同样的事情,它完美地运作了.我跑了'log10(2**31)/ log10(2)',我得到了一轮31.0
我尝试在Python 3.0.1中运行相同的原始函数,假设它是在更高级的版本中修复的.
为什么会这样?Python中的数学函数有可能存在一些不准确之处吗?
我已经阅读了关于浮点的大部分帖子,我理解使用IEEE 754的基本问题(并且仅仅通过以二进制形式存储数字的性质)某些分数无法表示.我试图找出以下内容:如果Python和JavaScript都使用IEEE 754标准,为什么在Python中执行以下操作?
.1 + .1
结果在0.20000000000000001(这是预期的)
在Javascript(至少在Chrome和Firefox中)的答案是.2
然而表演
.1 + .2
在两种语言中结果为0.30000000000000004
另外,执行var a = 0.3; 在JavaScript中打印结果为0.3
在Python中执行a = 0.3的结果为0.29999999999999999
我想了解这种行为差异的原因.
此外,OS上的许多帖子都链接到Java的BigDecimal的JavaScript端口,但链接已经死了.有人有副本吗?