2015-01-12 17 views
6

CMD không thể đánh giá mô đun số âm bằng cách sử dụng set /a?Bộ CMD/a, modulus và số âm

90 % 7 tương đương một cách chính xác đến 6 trong hàng loạt, tuy nhiên -90 % 7 cho -6 thay vì 1.

tôi nghĩ rằng nó có thể đã bị đánh giá -(90 % 7), nhưng điều này dường như không phải là trường hợp như (-90) % 7 cũng cho - 6.

h:\uprof>set /a -90%7 
-6 
h:\uprof>set /a (-90)%7 
-6 

Vì vậy - đây có phải là hạn chế của nhóm CMD/nhà điều hành Modulus không?

+1

Tại sao '-90% 7' nên cung cấp bạn 1 thay vì -6? – PetSerAl

+1

Theo máy tính của Google - [(-90) Modulo 7 = 1] (https://www.google.com.au/#q=-90%20%25%207). – unclemeat

+0

Máy tính Windows cũng cung cấp cho chúng tôi -6 – Rafael

Trả lời

4

% trong CMD giống như trong các môi trường microsoft khác là một hàm còn lại - không phải là một hoạt động modulo thực. Phần còn lại là chính xác ở đây để trả về -6 cho các ví dụ của bạn. Sử dụng mod trong Excel là một modulo đúng mà không trả lại bạn mong đợi 1.

Mặc dù nó được viết cho C#, bài viết dưới đây có một sự cố lớn về sự khác biệt: http://blogs.msdn.com/b/ericlippert/archive/2011/12/05/what-s-the-difference-remainder-vs-modulus.aspx

2

Như Jason W nói, % isn' t một toán tử modulo. Nhưng nếu bạn muốn -b mod N, có lẽ điều này có thể giúp:

@echo off 
set /a num1=7 
set /a num2=-90 
:add 
if %num2% LSS 0 set /a num2+=num1&goto add 
echo/%num2% 
pause 
+0

Cảm ơn, tôi đã tìm thấy một biểu thức khác không yêu cầu tính toán mô đun số âm - với chi phí vài byte (đối với [CodeGolf] (http://codegolf.stackexchange.com/)). – unclemeat

3

Nếu bạn muốn modulo đúng, hơn bạn có thể sử dụng này:

set a=-90 
set b=7 
set /a (a%b+b)%b 
Các vấn đề liên quan