2013-05-13 35 views
5

Cố gắng thực hiện phân chia giá trị âm trong Ruby, ví dụ: -123/10, tại sao nó trả về -13 thay vì -12?phân chia số nguyên trong Ruby với giá trị âm

ruby -v 
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1] 

irb(main):001:0> -123/10 
=> -13 
irb(main):002:0> -123%10 
=> 7 

-123/10 trả về -12 và -123% 10 trả về -3 trong C/C++ như mong đợi.

+1

Kết quả của '-123% 10' trong C và C++ là, AFAIK, phụ thuộc nền tảng vì vậy hãy cẩn thận về việc sử dụng các hành vi C như là tiêu chuẩn của bạn. –

Trả lời

7

Đây là cách thiết kế. Ruby làm tròn số tới cực âm trong trường hợp phân chia âm và hoạt động modulo. Đây không phải là duy nhất đối với Ruby, Python và Perl cũng như vậy.

Tuy nhiên, cách tiếp cận này cung cấp lý do toán học tốt.

a/b = q với phần còn lại r

b * q + r = a and 0 <= r < b 

Từ những gì tôi đọc, đây là cách số học được giảng dạy tại Nhật Bản.

Edit:

sawa chỉ ra rằng đây là cách tích cực số học được dạy ở Nhật Bản, không phải số âm. Tuy nhiên, như ông nói, điều này có thể được mở rộng đến số âm.

Nguồn:

Ruby Forums

+0

Trích dẫn của bạn (cũng như bản gốc) là gây hiểu lầm. 1. Công thức đó thực sự là cách nó được dạy ở các trường tiểu học ở Nhật Bản, nhưng nó không chỉ ở Nhật Bản. 2. Các trường tiểu học Nhật Bản không dạy số âm. Bạn nhận được hành vi đó bằng cách mở rộng công thức thành số âm. Không phải vì nó được dạy như thế. – sawa

+1

@sawa Đã cập nhật câu trả lời của tôi bằng cách xem xét nhận xét của bạn. –

+0

Liên kết Ruby Forums đã chết: ( –

Các vấn đề liên quan