2.3. Reprezentowanie liczb z dowolną dokładnością
Problem
Chcemy wykonać obliczenia z dużą dokładnością, wykraczającą poza możliwości arytmetyki obiektów typu Float
.
Rozwiązanie
Za pomocą obiektów typu BigDecimal
możemy reprezentować liczby rzeczywiste z dowolną dokładnością.
require 'bigdecimal' BigDecimal("10").to_s # => "0.1E2" BigDecimal("1000").to_s # => "0.1E4" BigDecimal("1000").to_s("F") # => "1000.0" BigDecimal("0.123456789").to_s # => "0.123456789E0"
Porównajmy to z dokładnością dostarczaną przez typ Float
:
nm = "0.123456789012345678901234567890123456789" nm.to_f # => 0.123456789012346 BigDecimal(nm).to_s # => "0.123456789012345678901234567890123456789E0"
Dyskusja
Obiekty BigDecimal
przechowują wartości zgodnie z tzw. ...
Get Ruby. Receptury now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.