请考虑以下代码:
0.1 + 0.2 == 0.3 -> false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2 -> 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些不准确之处?
我发现相同的mod操作会产生不同的结果,具体取决于使用的语言.
在Python中:
-1 % 10
Run Code Online (Sandbox Code Playgroud)
产生9
在C中它产生-1!
以下代码中的模数是做什么的?
from math import *
3.14 % 2 * pi
Run Code Online (Sandbox Code Playgroud)
我们如何计算浮点数的模数?
我没有找到运算符%的文档,因为它在Python中的字符串上使用.有人知道文档的位置吗?
你能告诉我多少钱(-2) % 5?根据我的Python解释器是3,但你有一个明智的解释吗?
我读过在某些语言中,结果可能与机器有关,但我不确定.
我注意到Python和Java中模数运算符的不同实现.
例如,在Python中:
>>> print -300 % 800
>>> 500
Run Code Online (Sandbox Code Playgroud)
在Java中:
System.out.println(-300 % 800);
-300
Run Code Online (Sandbox Code Playgroud)
这让我措手不及,因为我认为像模数一样基本的东西被普遍解释为同样的方式.我喜欢Python的解释(我认为它是从C借用的),尽管我看到了Java实现背后的逻辑.
你通常更喜欢哪一个?有不同解释的具体原因吗?我无意开始语言大战,只是好奇.
用简单的ints:
>>> -45 % 360
315
Run Code Online (Sandbox Code Playgroud)
然而,使用decimal.Decimal:
>>> from decimal import Decimal
>>> Decimal('-45') % 360
Decimal('-45')
Run Code Online (Sandbox Code Playgroud)
我希望得到Decimal('315').
这有什么理由吗?有没有办法获得一致的行为(没有修补decimal.Decimal)?(我没有改变上下文,也找不到如何改变它来解决这种情况).
正在查看其他答案,我仍然不理解python中负数的模数
例如df的回答
x == (x/y)*y + (x%y)
Run Code Online (Sandbox Code Playgroud)
所以有意义的是(-2)%5 = -2 - (-2/5)*5 = 3
这不是(-2 - (-2/5)*5)= 0还是我只是疯了? 具有负值的模数运算 - 奇怪的是什么?
最后,如果该标志取决于股息,为什么负股息与正面股票的产出不相同?
例如,输出
print([8%5,-8%5,4%5,-4%5])
Run Code Online (Sandbox Code Playgroud)
是
[3, 2, 4, 1]
Run Code Online (Sandbox Code Playgroud) 当我在Python 3.3.0中输入这些表达式时会出现问题
-10 // 3 # -4
-10 % 3 # 2
10 // -3 # -4
10 % -3 # -2
-10 // -3 # 3
Run Code Online (Sandbox Code Playgroud)
它似乎需要近似浮点(-3.33)?并且在整数除法中向下舍入,但在模运算中它做了完全不同的事情.看起来它返回余数+/- 1并且仅根据负操作数的位置切换符号.即使在查看本网站上的其他答案之后,我也完全感到困惑!我希望有人能够清楚地解释这个我!这本书提示:回想一下这个神奇的公式a =(a // b)(b)+(a%b),但这似乎根本不能为我清除水.
-提前致谢!
编辑:这些只是我对发生的事情的个人评估(上图),我知道,我完全不在了!