The top-level number type.
{ {'y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm'}, {nil, 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'} }
Default SI prefixes ordered by magnitude.
->(magnitude : Int32, _number : Float64) do
magnitude = Number.prefix_index(magnitude)
{magnitude, ( magnitude == 0 ? " " : si_prefix(magnitude))}
end
SI prefixes used by #humanize
. Equal to SI_PREFIXES
but prepends the prefix with a space charater.
Returns the SI prefix for magnitude.
Returns self.
Divides self
by other using floored division.
The comparison operator.
The comparison operator.
Returns the absolute value of this number.
Returns the square of self
(self * self
).
Returns a Tuple
of two elements containing the quotient and modulus obtained by dividing self
by number.
Prints this number as a String
using a customizable format.
Prints this number as a String
using a customizable format.
Pretty prints this number as a String
in a human-readable format.
Pretty prints this number as a String
in a human-readable format.
Pretty prints this number as a String
in a human-readable format.
Pretty prints this number as a String
in a human-readable format.
Pretty prints this number as a String
in a human-readable format.
Pretty prints this number as a String
in a human-readable format.
Rounds this number to a given precision in decimal digits.
Returns the sign of this number as an Int32
.
Keeps digits significants digits of this number in the given base.
Invokes the given block with the sequence of numbers starting at self
, incremented by by on each call, and with an optional to.
Returns true
if value is equal to zero.
Creates a StaticArray
of self
with the given values, which will be casted to this type with the new
method (defined in each Number
type).
Comparable(BigFloat)
Comparable(Number)
Value
Object
Object
Returns the SI prefix for magnitude.
Number.si_prefix(3) # => 'k'
Returns self.
Divides self
by other using floored division.
The result will be of the same type as self
.
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]
The comparison operator.
Returns:
-1
if self
is less than other
0
if self
is equal to other
-1
if self
is greater than other
nil
if self is NaN
or other is NaN
, because NaN
values are not comparableReturns the absolute value of this number.
123.abs # => 123 -123.abs # => 123
Returns the square of self
(self * self
).
4.abs2 # => 16 1.5.abs2 # => 2.25
Returns a Tuple
of two elements containing the quotient and modulus obtained by dividing self
by number.
11.divmod(3) # => {3, 2} 11.divmod(-3) # => {-4, -1}
Prints this number as a String
using a customizable format.
separator is used as decimal separator, delimiter as thousands delimiter between batches of group digits.
If decimal_places is nil
, all significant decimal places are printed (similar to #to_s
). If the argument has a numeric value, the number of visible decimal places will be fixed to that amount.
Trailing zeros are omitted if only_significant is true
.
123_456.789.format # => "123,456.789" 123_456.789.format(',', '.') # => "123.456,789" 123_456.789.format(decimal_places: 2) # => "123,456.79" 123_456.789.format(decimal_places: 6) # => "123,456.789000" 123_456.789.format(decimal_places: 6, only_significant: true) # => "123,456.789"
Prints this number as a String
using a customizable format.
separator is used as decimal separator, delimiter as thousands delimiter between batches of group digits.
If decimal_places is nil
, all significant decimal places are printed (similar to #to_s
). If the argument has a numeric value, the number of visible decimal places will be fixed to that amount.
Trailing zeros are omitted if only_significant is true
.
123_456.789.format # => "123,456.789" 123_456.789.format(',', '.') # => "123.456,789" 123_456.789.format(decimal_places: 2) # => "123,456.79" 123_456.789.format(decimal_places: 6) # => "123,456.789000" 123_456.789.format(decimal_places: 6, only_significant: true) # => "123,456.789"
Pretty prints this number as a String
in a human-readable format.
This is particularly useful if a number can have a wide value range and the exact value is less relevant.
It rounds the number to the nearest thousands magnitude with precision number of significant digits. The order of magnitude is expressed with an appended quantifier. By default, SI prefixes are used (see SI_PREFIXES
).
1_200_000_000.humanize # => "1.2G" 0.000_000_012.humanize # => "12.0n"
If significant is false
, the number of precision digits is preserved after the decimal separator.
1_234.567_890.humanize(precision: 2) # => "1.2k" 1_234.567_890.humanize(precision: 2, significant: false) # => "1.23k"
separator describes the decimal separator, delimiter the thousands delimiter (see #format
).
See Int#humanize_bytes
to format a file size.
Pretty prints this number as a String
in a human-readable format.
This is particularly useful if a number can have a wide value range and the exact value is less relevant.
It rounds the number to the nearest thousands magnitude with precision number of significant digits. The order of magnitude is expressed with an appended quantifier. By default, SI prefixes are used (see SI_PREFIXES
).
1_200_000_000.humanize # => "1.2G" 0.000_000_012.humanize # => "12.0n"
If significant is false
, the number of precision digits is preserved after the decimal separator.
1_234.567_890.humanize(precision: 2) # => "1.2k" 1_234.567_890.humanize(precision: 2, significant: false) # => "1.23k"
separator describes the decimal separator, delimiter the thousands delimiter (see #format
).
This methods yields the order of magnitude and self
and expects the block to return a Tuple(Int32, _)
containing the (adjusted) magnitude and unit. The magnitude is typically adjusted to a multiple of 3
.
def humanize_length(number) number.humanize do |magnitude, number| case magnitude when -2, -1 then {-2, " cm"} when .>=(4) {3, " km"} else magnitude = Number.prefix_index(magnitude) {magnitude, " #{Number.si_prefix(magnitude)}m"} end end end humanize_length(1_420) # => "1.42 km" humanize_length(0.23) # => "23.0 cm"
See Int#humanize_bytes
to format a file size.
Pretty prints this number as a String
in a human-readable format.
This is particularly useful if a number can have a wide value range and the exact value is less relevant.
It rounds the number to the nearest thousands magnitude with precision number of significant digits. The order of magnitude is expressed with an appended quantifier. By default, SI prefixes are used (see SI_PREFIXES
).
1_200_000_000.humanize # => "1.2G" 0.000_000_012.humanize # => "12.0n"
If significant is false
, the number of precision digits is preserved after the decimal separator.
1_234.567_890.humanize(precision: 2) # => "1.2k" 1_234.567_890.humanize(precision: 2, significant: false) # => "1.23k"
separator describes the decimal separator, delimiter the thousands delimiter (see #format
).
This methods yields the order of magnitude and self
and expects the block to return a Tuple(Int32, _)
containing the (adjusted) magnitude and unit. The magnitude is typically adjusted to a multiple of 3
.
def humanize_length(number) number.humanize do |magnitude, number| case magnitude when -2, -1 then {-2, " cm"} when .>=(4) {3, " km"} else magnitude = Number.prefix_index(magnitude) {magnitude, " #{Number.si_prefix(magnitude)}m"} end end end humanize_length(1_420) # => "1.42 km" humanize_length(0.23) # => "23.0 cm"
See Int#humanize_bytes
to format a file size.
Pretty prints this number as a String
in a human-readable format.
This is particularly useful if a number can have a wide value range and the exact value is less relevant.
It rounds the number to the nearest thousands magnitude with precision number of significant digits. The order of magnitude is expressed with an appended quantifier. By default, SI prefixes are used (see SI_PREFIXES
).
1_200_000_000.humanize # => "1.2G" 0.000_000_012.humanize # => "12.0n"
If significant is false
, the number of precision digits is preserved after the decimal separator.
1_234.567_890.humanize(precision: 2) # => "1.2k" 1_234.567_890.humanize(precision: 2, significant: false) # => "1.23k"
separator describes the decimal separator, delimiter the thousands delimiter (see #format
).
This methods yields the order of magnitude and self
and expects the block to return a Tuple(Int32, _)
containing the (adjusted) magnitude and unit. The magnitude is typically adjusted to a multiple of 3
.
def humanize_length(number) number.humanize do |magnitude, number| case magnitude when -2, -1 then {-2, " cm"} when .>=(4) {3, " km"} else magnitude = Number.prefix_index(magnitude) {magnitude, " #{Number.si_prefix(magnitude)}m"} end end end humanize_length(1_420) # => "1.42 km" humanize_length(0.23) # => "23.0 cm"
See Int#humanize_bytes
to format a file size.
Pretty prints this number as a String
in a human-readable format.
This is particularly useful if a number can have a wide value range and the exact value is less relevant.
It rounds the number to the nearest thousands magnitude with precision number of significant digits. The order of magnitude is expressed with an appended quantifier. By default, SI prefixes are used (see SI_PREFIXES
).
1_200_000_000.humanize # => "1.2G" 0.000_000_012.humanize # => "12.0n"
If significant is false
, the number of precision digits is preserved after the decimal separator.
1_234.567_890.humanize(precision: 2) # => "1.2k" 1_234.567_890.humanize(precision: 2, significant: false) # => "1.23k"
separator describes the decimal separator, delimiter the thousands delimiter (see #format
).
See Int#humanize_bytes
to format a file size.
Pretty prints this number as a String
in a human-readable format.
This is particularly useful if a number can have a wide value range and the exact value is less relevant.
It rounds the number to the nearest thousands magnitude with precision number of significant digits. The order of magnitude is expressed with an appended quantifier. By default, SI prefixes are used (see SI_PREFIXES
).
1_200_000_000.humanize # => "1.2G" 0.000_000_012.humanize # => "12.0n"
If significant is false
, the number of precision digits is preserved after the decimal separator.
1_234.567_890.humanize(precision: 2) # => "1.2k" 1_234.567_890.humanize(precision: 2, significant: false) # => "1.23k"
separator describes the decimal separator, delimiter the thousands delimiter (see #format
).
This methods yields the order of magnitude and self
and expects the block to return a Tuple(Int32, _)
containing the (adjusted) magnitude and unit. The magnitude is typically adjusted to a multiple of 3
.
def humanize_length(number) number.humanize do |magnitude, number| case magnitude when -2, -1 then {-2, " cm"} when .>=(4) {3, " km"} else magnitude = Number.prefix_index(magnitude) {magnitude, " #{Number.si_prefix(magnitude)}m"} end end end humanize_length(1_420) # => "1.42 km" humanize_length(0.23) # => "23.0 cm"
See Int#humanize_bytes
to format a file size.
Rounds this number to a given precision in decimal digits.
-1763.116.round(2) # => -1763.12
Returns the sign of this number as an Int32
.
-1
if this number is negative0
if this number is zero1
if this number is positive123.sign # => 1 0.sign # => 0 -42.sign # => -1
Keeps digits significants digits of this number in the given base.
1234.567.significant(1) # => 1000 1234.567.significant(2) # => 1200 1234.567.significant(3) # => 1230 1234.567.significant(4) # => 1235 1234.567.significant(5) # => 1234.6 1234.567.significant(6) # => 1234.57 1234.567.significant(7) # => 1234.567 1234.567.significant(8) # => 1234.567 15.159.significant(1, base = 2) # => 16
Invokes the given block with the sequence of numbers starting at self
, incremented by by on each call, and with an optional to.
3.step(to: 10, by: 2) do |n| puts n end
Output:
3 5 7 9
Creates a StaticArray
of self
with the given values, which will be casted to this type with the new
method (defined in each Number
type).
floats = Float64.static_array(1, 2, 3, 4) floats.class # => StaticArray(Float64, 4) ints = Int64.static_array(1, 2, 3) ints.class # => StaticArray(Int64, 3)
© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/Number.html