2012-05-06 34 views

Trả lời

17

Điều này sẽ cho kết quả là giữa 0 và n - 1 cho cả hai giá trị tích cực và tiêu cực của x:

((x % n) + n) % n 
+0

Công cụ này vượt quá đầu tôi, nhưng nó hoạt động. Cảm ơn! –

+1

Bạn tôi vừa mới chỉ ra rằng một phiên bản ngắn hơn sẽ là (n + x)% n –

+8

@TomHalladay: Nó hoạt động với x> = -n nhưng vẫn sẽ cho kết quả âm tính với x <-n. –

3

Vâng, modular arithmetic được thực hiện trên equivalence classes của số nguyên, vì vậy không Excel hay bất kỳ RDBMS là "làm % sai". Nếu bạn muốn có một đại diện từ 0 đến 6, tuy nhiên, bạn luôn có thể làm

select (-3 % 7) + 7; 
+0

Vấn đề duy nhất là, nếu giá trị của tôi bằng 0, tôi cần kết quả là 0 –

+0

Đợi, vì vậy bạn có cặp số nguyên 'm' và' n' sao cho 'm' là đồng dư với 0 mod 'n', nhưng' select m% n' đang trả về cái gì đó khác 0 –

+1

@JackManey: Câu trả lời của bạn trong '(m% n) + n', điều này cho' (0% n) + n = n' trong đó OP muốn nó bằng '0'. Đó là một tập hợp các lý do tại sao câu trả lời của MarkByers có thêm '% n'. – MatBailie

1

Dám được ngu si đần độn (và muộn cho bữa tiệc).

declare @Modulus as Int = 7 
declare @Samples as Table (Value Int) 

insert into @Samples (Value) values (-12), (-3), (0), (3), (13), (70) 

select Value, 
    case Sign(Value) 
    when 1 then Value % @Modulus 
    when -1 then Value % @Modulus + @Modulus 
    else 0 
    end as Modulus 
    from @Samples 
Các vấn đề liên quan