struct BigDecimal
Included Modules
Defined in:
big.crbig/big_decimal.cr
Constant Summary
-
DEFAULT_MAX_DIV_ITERATIONS =
100_u64
-
TEN =
BigInt.new(10)
-
ZERO =
BigInt.new(0)
Constructors
-
.new(value : BigInt, scale : UInt64)
Creates a new
BigDecimal
fromBigInt
value andUInt64
scale, which matches the internal representation. -
.new(num : Float)
Creates a new
BigDecimal
fromFloat
. -
.new(num : BigRational)
Creates a new
BigDecimal
fromBigRational
. -
.new(num : BigDecimal)
Returns num.
-
.new(num : Int = 0, scale : Int = 0)
Creates a new
BigDecimal
fromInt
. -
.new(str : String)
Creates a new
BigDecimal
from aString
.
Instance Method Summary
- #*(other : BigDecimal) : BigDecimal
- #*(other : Int)
- #+(other : BigDecimal) : BigDecimal
- #+(other : Int)
- #-(other : BigDecimal) : BigDecimal
- #-(other : Int)
- #- : BigDecimal
- #/(other : BigDecimal) : BigDecimal
- #/(other : Int)
- #<=>(other : Int | Float | BigRational)
- #<=>(other : BigDecimal) : Int32
- #==(other : BigDecimal) : Bool
- #clone
-
#div(other : BigDecimal, max_div_iterations = DEFAULT_MAX_DIV_ITERATIONS) : BigDecimal
Divides
self
with anotherBigDecimal
, with a optionally configurable max_div_iterations, which defines a maximum number of iterations in case the division is not exact. - #hash(hasher)
- #inspect(io)
-
#normalize_quotient(other : BigDecimal, quotient : BigInt) : BigInt
Returns the quotient as absolutely negative if
self
and other have different signs, otherwise returns the quotient. - #scale : UInt64
-
#scale_to(new_scale : BigDecimal) : BigDecimal
Scales a
BigDecimal
to anotherBigDecimal
, so they can be computed easier. - #to_big_d
-
#to_big_f
Converts to
BigFloat
. -
#to_big_i
Converts to
BigInt
. -
#to_f
Converts to
Float64
. -
#to_f!
Converts to
Float64
. -
#to_f32
Converts to
Float32
. -
#to_f32!
Converts to
Float32
. -
#to_f64
Converts to
Float64
. -
#to_f64!
Converts to
Float64
. -
#to_i
Converts to
Int32
. -
#to_i!
Converts to
Int32
. -
#to_i16
Converts to
Int16
. -
#to_i16!
Converts to
Int16
. -
#to_i32
Converts to
Int32
. -
#to_i32!
Converts to
Int32
. -
#to_i64
Converts to
Int64
. -
#to_i64!
Converts to
Int64
. -
#to_i8
Converts to
Int8
. -
#to_i8!
Converts to
Int8
. - #to_s(io : IO)
-
#to_u
Converts to
UInt32
. -
#to_u!
Converts to
UInt32
. -
#to_u16
Converts to
UInt16
. -
#to_u16!
Converts to
UInt16
. -
#to_u32
Converts to
UInt32
. -
#to_u32!
Converts to
UInt32
. -
#to_u64
Converts to
UInt64
. -
#to_u64!
Converts to
UInt64
. -
#to_u8
Converts to
UInt8
. -
#to_u8!
Converts to
UInt8
. - #value : BigInt
Instance methods inherited from module Comparable(BigDecimal)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=
Instance methods inherited from module Comparable(BigRational)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=
Instance methods inherited from module Comparable(Float)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=
Instance methods inherited from module Comparable(Int)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=
Instance methods inherited from struct Number
*(other : Complex)*(other : BigFloat) *, +(other : BigFloat)
+(other : Complex)
+ +, -(other : Complex)
-(other : BigFloat) -, /(other : Complex)
/(other : BigFloat) /, <=>(other : BigFloat)
<=>(other) <=>, ==(other : Complex) ==, abs abs, abs2 abs2, cis cis, clamp(min, max)
clamp(range : Range) clamp, divmod(number) divmod, i i, round(digits = 0, base = 10) round, sign sign, significant(digits, base = 10) significant, step(*, to = nil, by = 1)
step(*, to = nil, by = 1, &block) step, to_big_f to_big_f, to_c to_c, to_yaml(yaml : YAML::Nodes::Builder) to_yaml, zero? : Bool zero?
Constructor methods inherited from struct Number
zero : self
zero
Instance methods inherited from module Comparable(BigFloat)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=
Instance methods inherited from module Comparable(Number)
<(other : T)
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T)
>,
>=(other : T)
>=
Instance methods inherited from struct Value
==(other : JSON::Any)==(other : YAML::Any)
==(other) ==, dup dup
Instance methods inherited from class Object
!=(other)
!=,
!~(other)
!~,
==(other)
==,
===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, class class, dup dup, hash(hasher)
hash hash, inspect(io : IO)
inspect inspect, itself itself, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, tap(&block) tap, to_json(io : IO)
to_json to_json, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ") to_pretty_json, to_s
to_s(io : IO) to_s, to_yaml(io : IO)
to_yaml to_yaml, try(&block) try, unsafe_as(type : T.class) forall T unsafe_as
Constructor methods inherited from class Object
from_json(string_or_io, root : String) : selffrom_json(string_or_io) : self from_json, from_yaml(string_or_io : String | IO) : self from_yaml
Constructor Detail
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.
Returns num. Useful for generic code that does T.new(...)
with T
being a Number
.
Creates a new BigDecimal
from a String
.
Allows only valid number strings with an optional negative sign.
Instance Method Detail
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(1).div(BigDecimal(2)) # => BigDecimal(@value=5, @scale=2)
BigDecimal(1).div(BigDecimal(3), 5) # => BigDecimal(@value=33333, @scale=5)
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 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,
converting negative to positive.
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,
converting negative to positive.
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,
converting negative to positive.
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,
converting negative to positive.
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,
converting negative to positive.
Raises OverflowError
in case of overflow.