在Python和Ruby中,带符号的整数除法向负无穷大截断,有符号整数模数与第二个操作数具有相同的符号:
>>> (-41) / 3
-14
>>> (-41) % 3
1
Run Code Online (Sandbox Code Playgroud)
但是,在C和Java中,带符号的整数除法截断为0,有符号整数模数与第一个操作数的符号相同:
printf("%d\n", (-41) / 3); /* prints "-13" */
printf("%d\n", (-41) % 3); /* prints "-2" */
Run Code Online (Sandbox Code Playgroud)
在C和Python中执行相同类型的除法和模数的最简单,最有效的方法是什么?
我想知道如何在Java中获得单值的余数和商.
例:
3/2我应该得到1.5的价值.
如果我使用/运算符,我只得到商.如果我使用%操作员,我只得到余数.如何在同一个变量中同时获得两者?
我一直在阅读Python中的除法和整数除法以及Python2与Python3之间的区别.在大多数情况下,这一切都是有道理的.仅当两个值都是整数时,Python 2才使用整数除法.Python 3总是执行真正的划分.Python 2.2+引入了//整数除法运算符.
其他程序员提供的示例很好,很整洁,例如:
>>> 1.0 // 2.0 # floors result, returns float
0.0
>>> -1 // 2 # negatives are still floored
-1
Run Code Online (Sandbox Code Playgroud)
如何//实施?为什么会发生以下情况:
>>> import math
>>> x = 0.5
>>> y = 0.1
>>> x / y
5.0
>>> math.floor(x/y)
5.0
>>> x // y
4.0
Run Code Online (Sandbox Code Playgroud)
不应该x // y = math.floor(x/y)?这些结果是在python2.7上生成的,但由于x和y都是浮点数,因此python3 +上的结果应该相同.如果有一些浮点错误x/y实际上4.999999999999999并且math.floor(4.999999999999999) == 4.0不会反映出来x/y?
但是,以下类似情况不受影响:
>>> (.5*10) // (.1*10)
5.0
>>> .1 …Run Code Online (Sandbox Code Playgroud) 我希望能够做到以下几点:
num_intervals = (cur_date - previous_date) / interval_length
Run Code Online (Sandbox Code Playgroud)
要么
print (datetime.now() - (datetime.now() - timedelta(days=5)))
/ timedelta(hours=12)
# won't run, would like it to print '10'
Run Code Online (Sandbox Code Playgroud)
但是timedeltas不支持除法运算.有没有办法可以为timedeltas实现divison?
编辑:看起来这是添加到Python 3.2(感谢rincewind!):http://bugs.python.org/issue2706
System.Math.DivRem()和%运营商有什么区别?
地板划分是指结果始终向下(朝向-∞),而不是0:

是否有可能在C/C++中有效地实现floored或euclidean整数除法?
(显而易见的解决方案是检查红利的标志)
我的处理器是一个没有FPU和整数数学的小型16位微控制器,只有16/16分频和32/16分频,都需要18个周期.目前我正在使用一个非常慢的软件程序(约7,500个周期)进行64/32分割.有没有办法使用这些分区引擎来计算64/32分区?类似于我已经使用16x16乘法器和加法器来计算32x32乘法?我正在使用C但可以使用任何关于如何完成的一般性解释......我希望能够达到<200个周期(如果可能的话).
我有一个数据帧:
>>> dt
COL000 COL001 QT
STK_ID RPT_Date
STK000 20120331 2.6151 2.1467 1
20120630 4.0589 2.3442 2
20120930 4.4547 3.9204 3
20121231 4.1360 3.8559 4
STK001 20120331 -0.2178 0.9184 1
20120630 -1.9639 0.7900 2
20120930 -2.9147 1.0189 3
20121231 -2.5648 2.3743 4
STK002 20120331 -0.6426 0.9543 1
20120630 -0.3575 1.6085 2
20120930 -2.3549 0.7174 3
20121231 -3.4860 1.6324 4
Run Code Online (Sandbox Code Playgroud)
我希望列值除以'QT'列,有点像这样:
dt = dt/dt.QT # pandas does not accept this syntax
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
STK_ID RPT_Date COL000 COL001 QT
STK000 20120331 2.615110188 2.146655745 …Run Code Online (Sandbox Code Playgroud) 我在我的代码中进行的计算中遇到了这个问题,如果divident也为0,则除数为0.在我的代码中,我返回0表示该情况.我想知道,虽然除零通常是未定义的,为什么不对这种情况作出例外?我理解为什么除零是不确定的基本上是它无法逆转.但是,在0/0的情况下我没有看到这个问题.
编辑好了,所以这个问题产生了很多讨论.我犯了一个错误,就是因为它得到了很多选票而过于急切地接受了答案.我现在接受了AakashM的答案,因为它提供了如何分析问题的想法.
我想awk使用整数除法将两个数字分开,即截断结果.例如
k = 3 / 2
print k
Run Code Online (Sandbox Code Playgroud)
应该打印 1
根据手册,
师; 因为awk中的所有数字都是浮点数,结果不会舍入为整数
有没有解决方法来获取整数值?
原因是我想得到一个带有整数索引[0到num-1] 的数组的中间元素.