Skip to content

Instantly share code, notes, and snippets.

@tanhit243
Created September 25, 2022 15:28
Show Gist options
  • Save tanhit243/fe7a40914a26171c300c65ff06bfd0d4 to your computer and use it in GitHub Desktop.
Save tanhit243/fe7a40914a26171c300c65ff06bfd0d4 to your computer and use it in GitHub Desktop.
Floating-point in ruby
:info_neon: Chuyên mục MIL - Monday I learn - 004
Số trước mình đã giới thiệu về các tìm kiếm nhanh route với rails routes -g
Trong tuần này mình xin giới thiệu về BigDecimal ruby.
Ví dụ: Nếu ở ngoài đời khi được hỏi kết quả của phép toán 0.1 + 0.2 có bằng 0.3 không thì câu trả lời luôn là có quá ez. Nhưng với máy tính thì không. Hãy bật rails c lên và thử phép toán thì kết quả trả về là false
```
irb(main):013:0> 0.1 + 0.2
=> 0.30000000000000004
irb(main):014:0> 0.1 + 0.2 == 0.3
=> false
irb(main):015:0>
```
Đó là do vấn đề Floating-point cách lưu trữ trong phần cứng.
Để giải quyết vấn đề này mọi người có thể sử dụng BigDecimal của ruby nếu cần thiết nhé.
```
irb(main):016:0> BigDecimal('0.1') + BigDecimal('0.2')
=> 0.3e0
irb(main):017:0> BigDecimal('0.1') + BigDecimal('0.2') == 0.3
=> true
irb(main):018:0>
```
[FYI]
https://stackoverflow.com/questions/588004/is-floating-point-math-broken
https://viblo.asia/p/floating-point-error-va-cach-giai-quyet-trong-ruby-on-rails-XL6lADyNZek
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment