虽然我承认我对负数的模运算略知一二,但我知道这一点
-2 mod 50 = 48
在几乎所有在线模计算器以及libreoffice calc中:
=MOD(-2,50)
和python:
-2 % 50
这个号码( 48
)这就是我在mysql过程中编写的函数所需要的答案。但是,在mysql中:
SELECT MOD(-2,50)
给了我 -2
因此。
这是什么原因,我如何在mysql中得到我想要的结果?
为子孙后代:
截至2018年,以下语言提供了来自 -2 % 50
:
48
python
r
谷歌计算器
谷歌工作表
libreoffice计算
ubuntu计算器
-2
javascript语言
mysql数据库
microsoft计算器
PHP
正如评论中所指出的,更详尽的清单如下:https://en.wikipedia.org/wiki/modulo_operation
3条答案
按热度按时间cs7cruho1#
在sql中,当您对示例mod(x,y)进行模运算时,x是一个否定的答案,结果是从0到x-1的范围内给出的。因此,您得到了错误的输出。
也许你可以用这样一种方式来模拟这个问题,即你正在执行相同形式的mod。
试着这样做。
应该有用。
jaql4c8m2#
不幸的是,编程语言中的许多mod函数和%运算符并没有实现数学意义上的模函数:对于负参数,它们返回-(| a | mod b)。
解决方法:
如果a<0,使用mod(a+b-1,b);
如果保证a+c>=0并且没有溢出,则使用mod(a+c,b),其中c是b的倍数。
rqenqsqc3#
您可以实现自己版本的
MOD
在这个问题中使用除法,但最简单的解决方案可能是执行MOD
两次,操作之间加50:无论输入值是多少,这都将为您提供正确的结果。