CMD设置/ a,模数和负数

unc*_*eat 6 cmd batch-file modulo

CMD无法使用set /a?来评估负数模数?

90 % 7正确地等于批量为6,但是-90 % 7给出-6而不是1.

我认为它可能一直在评估-(90 % 7),但似乎并非如此,因为(-90) % 7也给出了-6.

h:\uprof>set /a -90%7
-6
h:\uprof>set /a (-90)%7
-6
Run Code Online (Sandbox Code Playgroud)

那么 - 这是CMD设置/模数运算符的限制吗?

use*_*407 5

如果您想要真正的模,则可以使用以下代码:

set a=-90
set b=7
set /a (a%b+b)%b
Run Code Online (Sandbox Code Playgroud)


Jas*_*n W 4

CMD 中的%与其他微软环境中的很相似,是一个余数函数 - 不是真正的模运算。对于您的示例,余数在这里是准确的返回 -6。在 Excel 中使用的mod是真模数,它会返回您期望的 1。

尽管它是为 C# 编写的,但下面的文章对差异进行了详细分析: http://blogs.msdn.com/b/ericlippert/archive/2011/12/05/what-s-the-difference-remainder-vs -模数.aspx