A BigDecimal
can represent arbitrarily large precision decimals.
It is internally represented by a pair of BigInt
and UInt64
: value and scale. Value contains the actual value, and scale tells the decimal point place. E.g. when value is 1234
and scale 2
, the result is 12.34
.
The general idea and some of the arithmetic algorithms were adapted from the MIT/APACHE-licensed bigdecimal-rs.
100_u64
BigInt.new(10)
BigInt.new(0)
Creates a new BigDecimal
from BigInt
value and UInt64
scale, which matches the internal representation.
Creates a new BigDecimal
from Float
.
Creates a new BigDecimal
from BigRational
.
Returns num.
Creates a new BigDecimal
from Int
.
Creates a new BigDecimal
from a String
.
Raises the decimal to the otherth power
The comparison operator.
Compares this object to other based on the receiver’s #<=>
method, returning true
if it returns 0
.
Divides self
with another BigDecimal
, with a optionally configurable max_div_iterations, which defines a maximum number of iterations in case the division is not exact.
Appends this object's value to hasher, and returns the modified hasher.
Returns the quotient as absolutely negative if self
and other have different signs, otherwise returns the quotient.
Scales a BigDecimal
to another BigDecimal
, so they can be computed easier.
Converts to BigFloat
.
Converts to BigInt
.
Converts to Float64
.
Converts to Float64
.
Converts to Float32
.
Converts to Float32
.
Converts to Float64
.
Converts to Float64
.
Converts to Int32
.
Converts to Int32
.
Converts to Int16
.
Converts to Int16
.
Converts to Int32
.
Converts to Int32
.
Converts to Int64
.
Converts to Int64
.
Converts to Int8
.
Converts to Int8
.
Converts to UInt32
.
Converts to UInt32
.
Converts to UInt16
.
Converts to UInt16
.
Converts to UInt32
.
Converts to UInt32
.
Converts to UInt64
.
Converts to UInt64
.
Converts to UInt8
.
Converts to UInt8
.
Comparable(BigDecimal)
Comparable(BigRational)
Comparable(Float)
Comparable(Int)
Number
Number
Number
Comparable(BigFloat)
Comparable(Number)
Value
Object
Object
Creates a new BigDecimal
from BigInt
value and UInt64
scale, which matches the internal representation.
Creates a new BigDecimal
from Float
.
NOTE Floats are fundamentally less precise than BigDecimals, which makes initialization from them risky.
Creates a new BigDecimal
from BigRational
.
NOTE BigRational are fundamentally more precise than BigDecimals, which makes initialization from them risky.
Creates a new BigDecimal
from Int
.
Creates a new BigDecimal
from a String
.
Allows only valid number strings with an optional negative sign.
Raises the decimal to the otherth power
require "big" BigDecimal.new(1234, 2) ** 2 # => 152.2756
The comparison operator. Returns 0
if the two objects are equal, a negative number if this object is considered less than other, a positive number if this object is considered greter than other, or nil
if the two objects are not comparable.
Subclasses define this method to provide class-specific ordering.
The comparison operator is usually used to sort values:
# Sort in a descending way: [3, 1, 2].sort { |x, y| y <=> x } # => [3, 2, 1] # Sort in an ascending way: [3, 1, 2].sort { |x, y| x <=> y } # => [1, 2, 3]
Compares this object to other based on the receiver’s #<=>
method, returning true
if it returns 0
.
Also returns true
if this and other are the same object.
Divides self
with another BigDecimal
, with a optionally configurable max_div_iterations, which defines a maximum number of iterations in case the division is not exact.
BigDecimal.new(1).div(BigDecimal.new(2)) # => BigDecimal(@value=5, @scale=2) BigDecimal.new(1).div(BigDecimal.new(3), 5) # => BigDecimal(@value=33333, @scale=5)
Appends this object's value to hasher, and returns the modified hasher.
Usually the macro def_hash
can be used to generate this method. Otherwise, invoke #hash(hasher)
on each object's instance variables to accumulate the result:
def hash(hasher) hasher = @some_ivar.hash(hasher) hasher = @some_other_ivar.hash(hasher) hasher end
Returns the quotient as absolutely negative if self
and other have different signs, otherwise returns the quotient.
Scales a BigDecimal
to another BigDecimal
, so they can be computed easier.
Converts to Float64
. Raises OverflowError
in case of overflow.
Converts to Float32
. Raises OverflowError
in case of overflow.
Converts to Float64
. Raises OverflowError
in case of overflow.
Converts to Int32
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to Int32
. Truncates anything on the right side of the decimal point. In case of overflow a wrapping is performed.
Converts to Int16
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to Int16
. Truncates anything on the right side of the decimal point. In case of overflow a wrapping is performed.
Converts to Int32
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to Int32
. Truncates anything on the right side of the decimal point. In case of overflow a wrapping is performed.
Converts to Int64
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to Int64
. Truncates anything on the right side of the decimal point. In case of overflow a wrapping is performed.
Converts to Int8
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to Int8
. Truncates anything on the right side of the decimal point. In case of overflow a wrapping is performed.
Converts to UInt32
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to UInt32
. Truncates anything on the right side of the decimal point, converting negative to positive. In case of overflow a wrapping is performed.
Converts to UInt16
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to UInt16
. Truncates anything on the right side of the decimal point, converting negative to positive. In case of overflow a wrapping is performed.
Converts to UInt32
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to UInt32
. Truncates anything on the right side of the decimal point, converting negative to positive. In case of overflow a wrapping is performed.
Converts to UInt64
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to UInt64
. Truncates anything on the right side of the decimal point, converting negative to positive. In case of overflow a wrapping is performed.
Converts to UInt8
. Truncates anything on the right side of the decimal point. Raises OverflowError
in case of overflow.
Converts to UInt8
. Truncates anything on the right side of the decimal point, converting negative to positive. In case of overflow a wrapping is performed.
© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/BigDecimal.html