Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Floatクラス

class Float

クラスの継承リスト: Float < Numeric < Comparable < Object < Kernel < BasicObject
dynamic include: JSON::Generator::GeneratorMethods::Float (by json)

要約

浮動小数点数のクラス。Float の実装は C 言語の double で、その精度は環 境に依存します。

一般にはせいぜい15桁です。詳しくは多くのシステムで採用されている 浮動小数点標準規格、IEEE (Institute of Electrical and Electronics Engineers: 米国電気電子技術者協会) 754 を参照してください。

# あるシステムでの 1/3(=0.333...) の結果
printf("%.50f\n", 1.0/3)
=> 0.33333333333333331482961625624739099293947219848633

Math::PI などの数学定数については Math を 参照してください。

目次

インスタンスメソッド
% modulo * ** + - -@ / < <= <=> == > >= abs magnitude angle arg phase ceil denominator divmod eql? finite? floor hash infinite? inspect to_s nan? negative? next_float numerator positive? prev_float rationalize round to_f to_i truncate to_r zero?
定数
DIG EPSILON INFINITY MANT_DIG MAX MAX_10_EXP MAX_EXP MIN MIN_10_EXP MIN_EXP NAN RADIX ROUNDS

インスタンスメソッド

self % other -> Float[permalink][rdoc]
modulo(other) -> Float

算術演算子。剰余を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
# 剰余
3 % 1.2   #=> 0.6
3.0 % 0   #=> NaN
self * other -> Float[permalink][rdoc]

算術演算子。積を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
# 積
2.4 * 3   #=> 7.2
self ** other -> Float[permalink][rdoc]

算術演算子。冪を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
# 冪
1.2 ** 3.0  #=> 1.728
3.0 + 4.5 - 1.3 / 2.4 * 3 % 1.2 ** 3.0 #=> 5.875
0.0 ** 0 #=> 1.0
self + other -> Float[permalink][rdoc]

算術演算子。和を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
# 和
3.0 + 4.5 #=> 7.5
self - other -> Float[permalink][rdoc]

算術演算子。差を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
# 差
4.5 - 1.3 #=> 3.2
- self -> Float[permalink][rdoc]

単項演算子の - です。 self の符号を反転させたものを返します。

self / other -> Float[permalink][rdoc]

算術演算子。商を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
# 商
1.3 / 2.4 #=> 0.541666666666667
1.0 / 0   #=> Infinity
self < other -> bool[permalink][rdoc]

比較演算子。数値として小さいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other が大きい場合 true を返します。 そうでなければ false を返します。

例:

3.14 <  3.1415  #=> true
3.14 <= 3.1415  #=> true
self <= other -> bool[permalink][rdoc]

比較演算子。数値として等しいまたは小さいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が大きい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。

例:

3.14 <  3.1415  #=> true
3.14 <= 3.1415  #=> true
self <=> other -> 1 | 0 | -1 | nil[permalink][rdoc]

self と other を比較して、self が大きい時に正、 等しい時に 0、小さい時に負の整数を返します。 比較できない場合はnilを返します

例:

3.05 <=> 3.14 #=> -1
1.732 <=> 1.414  #=> 1
3.3 - 3.3 <=> 0.0 #=> 0
3.14 <=> "hoge" #=> nil
3.14 <=> 0.0/0.0 #=> nil
self == other -> bool[permalink][rdoc]

比較演算子。数値として等しいか判定します。

ただし、NaN 同士の比較では常に false を返します。

[PARAM] other:
比較対象の数値
[RETURN]
self と other が等しい場合 true を返します。 そうでなければ false を返します。

例:

3.14 == 3.14000 #=> true
3.14 == 3.1415  #=> false

# NaN 同士では常に false
nan = 0.0/0
nan == nan      # => false
self > other -> bool[permalink][rdoc]

比較演算子。数値として大きいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が小さい場合 true を返します。 そうでなければ false を返します。

例:

3.14 >  3.1415  #=> false
3.14 >= 3.1415  #=> false
self >= other -> bool[permalink][rdoc]

比較演算子。数値として等しいまたは大きいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が小さい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。

例:

3.14 >  3.1415  #=> false
3.14 >= 3.1415  #=> false
abs -> Float[permalink][rdoc]
magnitude -> Float

自身の絶対値を返します。

例:

 34.56.abs     #=> 34.56
-34.56.abs     #=> 34.56
arg -> 0 | Float[permalink][rdoc]
angle -> 0 | Float
phase -> 0 | Float

自身の偏角(正の数なら 0、負の数なら Math::PI)を返します。

例:

1.arg  # => 0
-1.arg # => 3.141592653589793

ただし、自身が NaN(Not a number) であった場合は、NaN を返します。

ceil -> Integer[permalink][rdoc]

自身と等しいかより大きな整数のうち最小のものを返します。

例:

1.0.ceil      #=> 1
1.2.ceil      #=> 2
(-1.2).ceil   #=> -1
(-1.5).ceil   #=> -1

[SEE_ALSO] Float#floor, Float#round, Float#truncate

denominator -> Integer[permalink][rdoc]

自身を Rational に変換した時の分母を返します。

[RETURN]
分母を返します。
2.0.denominator         # => 1
0.5.denominator         # => 2

[SEE_ALSO] Float#numerator

divmod(other) -> [Numeric][permalink][rdoc]

self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にして返します。 商 q は常に整数ですが、余り r は整数であるとは限りません。

ここで、商 q と余り r は、

をみたす数です。 このメソッドは、メソッド / と % によって定義されています。

[PARAM] other:
自身を割る数を指定します。

例:

11.divmod(3)         #=> [3, 2]
(11.5).divmod(3.5)   #=> [3, 1.0]
11.divmod(-3)        #=> [-4, -1]
11.divmod(3.5)       #=> [3, 0.5]
(-11).divmod(3.5)    #=> [-4, 3.0]

[SEE_ALSO] Numeric#div, Numeric#modulo

eql?(other) -> bool[permalink][rdoc]

自身と other のクラスが等しくかつ == メソッドで比較して等しい場合に true を返します。 そうでない場合に false を返します。

[PARAM] other:
自身と比較したい数値を指定します。

例:

1.0.eql?(1)   #=> false
1.0.eql?(1.0) #=> true
finite? -> bool[permalink][rdoc]

数値が ∞, -∞, あるいは NaN でない場合に true を返します。 そうでない場合に false を返します。

例:

3.14.finite? #=> true
inf = 1.0/0
inf.finite? #=> false
floor -> Integer[permalink][rdoc]

自身と等しいかより小さな整数のうち最大のものを返します。

例:

1.0.floor      #=> 1
1.2.floor      #=> 1
(-1.2).floor   #=> -2
(-1.5).floor   #=> -2

[SEE_ALSO] Numeric#ceil, Numeric#round, Float#truncate

hash -> Fixnum[permalink][rdoc]

ハッシュ値を返します。

例:

pi1 = 3.14
pi2 = 3.14
pi3 = 3.1415

pi1.hash #=> 335364239
pi2.hash #=> 335364239
pi3.hash #=> 420540030
infinite? -> 1 | -1 | nil[permalink][rdoc]

数値が +∞ のとき 1、-∞のとき -1 を返します。それ以外は nil を返 します。

例:

inf = 1.0/0
p inf
p inf.infinite?

=> Infinity
   1

inf = -1.0/0
p inf
p inf.infinite?

=> -Infinity
   -1
to_s -> String[permalink][rdoc]
inspect -> String

自身を人間が読みやすい形の文字列表現にして返します。

固定小数点、浮動小数点の形式か、 "Infinity"、"-Infinity"、"NaN" のいず れかを返します。

[RETURN]
文字列を返します。

例:

0.00001.to_s             # => "1.0e-05"
3.14.to_s                # => "3.14"
10000_00000_00000.0.to_s # => "100000000000000.0"
10000_00000_00000_00000.0.to_s # => "1.0e+19"
(1.0/0.0).to_s           # => "Infinity"
(0.0/0.0).to_s           # => "NaN"
nan? -> bool[permalink][rdoc]

数値が NaN(Not a number)のとき真を返します。

例:

nan = 0.0/0.0
p nan
p nan.nan?

=> NaN
   true
negative? -> bool[permalink][rdoc]

self が 0 未満の場合に true を返します。そうでない場合に false を返します。

[SEE_ALSO] Float#positive?

next_float -> Float[permalink][rdoc]

浮動小数点数で表現可能な self の次の値を返します。

Float::MAX.next_float、Float::INFINITY.next_float は Float::INFINITY を返します。Float::NAN.next_float は Float::NAN を返します。

例:

p 0.01.next_float  # => 0.010000000000000002
p 1.0.next_float   # => 1.0000000000000002
p 100.0.next_float # => 100.00000000000001

p 0.01.next_float - 0.01   # => 1.734723475976807e-18
p 1.0.next_float - 1.0     # => 2.220446049250313e-16
p 100.0.next_float - 100.0 # => 1.4210854715202004e-14

f = 0.01; 20.times { printf "%-20a %s\n", f, f.to_s; f = f.next_float }
# => 0x1.47ae147ae147bp-7 0.01
#    0x1.47ae147ae147cp-7 0.010000000000000002
#    0x1.47ae147ae147dp-7 0.010000000000000004
#    0x1.47ae147ae147ep-7 0.010000000000000005
#    0x1.47ae147ae147fp-7 0.010000000000000007
#    0x1.47ae147ae148p-7  0.010000000000000009
#    0x1.47ae147ae1481p-7 0.01000000000000001
#    0x1.47ae147ae1482p-7 0.010000000000000012
#    0x1.47ae147ae1483p-7 0.010000000000000014
#    0x1.47ae147ae1484p-7 0.010000000000000016
#    0x1.47ae147ae1485p-7 0.010000000000000018
#    0x1.47ae147ae1486p-7 0.01000000000000002
#    0x1.47ae147ae1487p-7 0.010000000000000021
#    0x1.47ae147ae1488p-7 0.010000000000000023
#    0x1.47ae147ae1489p-7 0.010000000000000024
#    0x1.47ae147ae148ap-7 0.010000000000000026
#    0x1.47ae147ae148bp-7 0.010000000000000028
#    0x1.47ae147ae148cp-7 0.01000000000000003
#    0x1.47ae147ae148dp-7 0.010000000000000031
#    0x1.47ae147ae148ep-7 0.010000000000000033

[SEE_ALSO] Float#prev_float

numerator -> Integer[permalink][rdoc]

自身を Rational に変換した時の分子を返します。

[RETURN]
分子を返します。
2.0.numerator           # => 2
0.5.numerator           # => 1

[SEE_ALSO] Float#denominator

positive? -> bool[permalink][rdoc]

self が 0 より大きい場合に true を返します。そうでない場合に false を返します。

[SEE_ALSO] Float#negative?

prev_float -> Float[permalink][rdoc]

浮動小数点数で表現可能な self の前の値を返します。

(-Float::MAX).prev_float と (-Float::INFINITY).prev_float は -Float::INFINITY を返します。Float::NAN.prev_float は Float::NAN を返します。

例:

p 0.01.prev_float  # => 0.009999999999999998
p 1.0.prev_float   # => 0.9999999999999999
p 100.0.prev_float # => 99.99999999999999

p 0.01 - 0.01.prev_float   # => 1.734723475976807e-18
p 1.0 - 1.0.prev_float     # => 1.1102230246251565e-16
p 100.0 - 100.0.prev_float # => 1.4210854715202004e-14

f = 0.01; 20.times { printf "%-20a %s\n", f, f.to_s; f = f.prev_float }
# => 0x1.47ae147ae147bp-7 0.01
#    0x1.47ae147ae147ap-7 0.009999999999999998
#    0x1.47ae147ae1479p-7 0.009999999999999997
#    0x1.47ae147ae1478p-7 0.009999999999999995
#    0x1.47ae147ae1477p-7 0.009999999999999993
#    0x1.47ae147ae1476p-7 0.009999999999999992
#    0x1.47ae147ae1475p-7 0.00999999999999999
#    0x1.47ae147ae1474p-7 0.009999999999999988
#    0x1.47ae147ae1473p-7 0.009999999999999986
#    0x1.47ae147ae1472p-7 0.009999999999999985
#    0x1.47ae147ae1471p-7 0.009999999999999983
#    0x1.47ae147ae147p-7  0.009999999999999981
#    0x1.47ae147ae146fp-7 0.00999999999999998
#    0x1.47ae147ae146ep-7 0.009999999999999978
#    0x1.47ae147ae146dp-7 0.009999999999999976
#    0x1.47ae147ae146cp-7 0.009999999999999974
#    0x1.47ae147ae146bp-7 0.009999999999999972
#    0x1.47ae147ae146ap-7 0.00999999999999997
#    0x1.47ae147ae1469p-7 0.009999999999999969
#    0x1.47ae147ae1468p-7 0.009999999999999967

[SEE_ALSO] Float#next_float

rationalize -> Rational[permalink][rdoc]
rationalize(eps) -> Rational

自身から eps で指定した許容誤差の範囲に収まるような Rational を返 します。

eps を省略した場合は誤差が最も小さくなるような Rational を返しま す。

[PARAM] eps:
許容する誤差

例:

0.3.rationalize          #=> (3/10)
1.333.rationalize        #=> (1333/1000)
1.333.rationalize(0.01)  #=> (4/3)
round(ndigits = 0) -> Fixnum | Float[permalink][rdoc]

自身ともっとも近い整数もしくは実数を返します。

中央値 0.5, -0.5 はそれぞれ 1,-1 に切り上げされます。 いわゆる四捨五入ですが、偶数丸めではありません。

[PARAM] ndigits:
丸める位を指定します。 ndigitsが0ならば、小数点以下を四捨五入し、整数を返します。 ndigitsが0より大きいならば、小数点以下の指定された位で四捨五入されます。 ndigitsが0より小さいならば、小数点以上の指定された位で四捨五入されます。
[RETURN]
指定された引数に応じて、整数もしくは実数を返します。 ndigitsが0ならば、整数を返します。 ndigitsが0より大きいならば、実数を返します。 ndigitsが0より小さいならば、整数を返します。
[EXCEPTION] TypeError:
ndigits で指定されたオブジェクトが整数に変換できない場 合発生します。
1.0.round      #=> 1
1.2.round      #=> 1
(-1.2).round   #=> -1
(-1.5).round   #=> -2

t = Math::PI #=> 3.141592653589793
t.round(3)   #=> 3.142
t.round(0)   #=> 3
t.round(1)   #=> 3.1

t = t**10      #=> 93648.04747608298
t.round(-0)    #=> 93648
t.round(-1)    #=> 93650
t.round(-2)    #=> 93600
t.round(-3)    #=> 94000
t.round(-100)  #=> 0

[SEE_ALSO] Float#ceil, Float#floor, Float#truncate

to_f -> self[permalink][rdoc]

self を返します。

例:

3.14.to_f   #=> 3.14
to_i -> Integer[permalink][rdoc]
truncate -> Integer

小数点以下を切り捨てて値を整数に変換します。

例:

3.14.to_i   #=> 3

[SEE_ALSO] Numeric#round, Numeric#ceil, Numeric#floor

to_r -> Rational[permalink][rdoc]

自身を Rational に変換します。

例:

0.5.to_r      # => (1/2)
zero? -> bool[permalink][rdoc]

自身がゼロの時、trueを返します。そうでない場合は false を返します。

例:

10.0.zero?            #=> false
0.zero?               #=> true
0.0.zero?             #=> true

定数

DIG -> Fixnum[permalink][rdoc]

Float が表現できる最大の 10 進桁数

EPSILON -> Float[permalink][rdoc]

1.0 + Float::EPSILON != 1.0 となる最小の値

INFINITY -> Float[permalink][rdoc]

浮動小数点数における正の無限大

[SEE_ALSO] Float#finite?, Float#infinite?

MANT_DIG -> Fixnum[permalink][rdoc]

仮数部の Float::RADIX 進法での桁数

MAX -> Float[permalink][rdoc]

Float が取り得る最大値

MAX_10_EXP -> Fixnum[permalink][rdoc]

最大の 10 進の指数

MAX_EXP -> Fixnum[permalink][rdoc]

最大の Float::RADIX 進の指数

MIN -> Float[permalink][rdoc]

Float が取り得る最小値

MIN_10_EXP -> Fixnum[permalink][rdoc]

最小の 10 進の指数

MIN_EXP -> Fixnum[permalink][rdoc]

最小の Float::RADIX 進の指数

NAN -> Float[permalink][rdoc]

浮動小数点数における NaN(Not a number)

[SEE_ALSO] Float#nan?

RADIX -> Fixnum[permalink][rdoc]

指数表現の基数

ROUNDS -> Fixnum[permalink][rdoc]

丸めモード (-1: 不定、0: 0.0 の方向に丸め、1: 四捨五入、2:正の無限 大の方向に丸め、3:負の無限大の方向に丸め)