12/08/2018, 13:59

Hiểu rõ hơn cách làm tròn trong Ruby

Sau đây là một bài đọc nhỏ nhỏ về một điều đơn giản hẳn ai cũng biết kết qủa song nhiều bạn chắc còn chưa rõ nguyên nhân và nhiều khi còn chưa để ý. Bạn đã từng thực hiện phép toán làm tròn theo kiểu Integer trong Ruby chưa? và bạn có thấy sự khác biệt với một vài ngôn ngữ khác không? Sau đây ...

Sau đây là một bài đọc nhỏ nhỏ về một điều đơn giản hẳn ai cũng biết kết qủa song nhiều bạn chắc còn chưa rõ nguyên nhân và nhiều khi còn chưa để ý.

Bạn đã từng thực hiện phép toán làm tròn theo kiểu Integer trong Ruby chưa? và bạn có thấy sự khác biệt với một vài ngôn ngữ khác không?

Sau đây ta cùng làm rõ vấn đề nhé!

Bắt đầu với phép chia để hiểu rõ cách làm tròn của Ruby nhé mọi người.

Ruby

[3] pry(main)> 7/3
=> 2
[4] pry(main)> 7.to_f/3
=> 2.3333333333333335

Ex: Java

System.out.println(7/3);
#> 2
System.out.println((float)7/3);
#> 2.3333333

Chắc bạn vẫn chưa rõ sự khác nhau nhỉ?

Cùng xem ví dụ sau đây để rõ hơn.

Ruby:

[5] pry(main)> -7.to_f/3
=> -2.3333333333333335
[6] pry(main)> -7/3
=> -3

EX: Java

System.out.println((float)-7/3);
#> -2.3333333
System.out.println(-7/3);
#> -2

Có một sự khác nhau giữa cách làm tròn trong Ruby và Java?

-7/3 trong ruby có kết qủa -3 và trong java có kết qủa là -2. Tại sao lại khác nhau như thế nhỉ?

Cơ bản của sự khác nhau là Ruby sử dụng cách hướng kết qủa về âm vô cùng trên trục số.

Còn java và một số ngôn ngữ khác lại là hướng kết qủa về 0 trên trục số.

Qua bài này mong bạn hiểu thêm 1 sự khác biệt cơ bản để tránh vài lỗi khi xử lý các bài toán làm tròn trên Ruby.

0