ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます。脱線もしますが助けになれば幸いです。

改めてRubyの整数と浮動小数点数についてまとめた

はじめに

基礎からRubyの勉強をし直そうということでプログラミング言語 Rubyをガッツリ読み直していると、普段何気なく使ってる数値も深く書かれているので少しまとめます。

数値について

全ての数値オブジェクトは Numericクラスのインスタンス。整数であったり浮動小数点数であったりすると Integerクラスや Flortクラスのインスタンスになったりする。

種類

整数リテラル

単純に数字を並べればリテラルになる

1234
0
85943

クラスは FixnumBignumの二つで、Fixnumで対応できない大きい値(31ビット幅より上)はBignumになる。

1000000.class
=> Fixnum

100000000000000000000.class
=> Bignum

2進数、8進数、16進数で書くこともできる

  • 2進数
    • 頭に 0b
0b1101
=> 13
  • 8進数
    • 頭に 0
0757
=> 495
  • 16進数
    • 頭に 0x
0xFA
=>250


それぞれ対応していない値を書くとエラーになる

# これらは全てエラー
0b30
0922
0xFG


では8進数等で書いた文字列を to_iするとどうなるか。

'0b1011'.to_i
=>0
'0922'.to_i
=>922
'0xFA'.to_i
=>0

10進数として扱われた。2進数などはリテラルでないと無理っぽい。

浮動小数点数リテラル

いわゆる小数点付きの数値が浮動小数点数。 Floatクラスで表される。

1.02
0.5


指数形式でも書ける。

2.01e8 # 2.01に10の8乗をかけたもの
=> 201000000.0


では2.01e8という文字列を to_fするとどうなるか。

'2.01e8'.to_f
=> 201000000.0

動いた。

ちなみに0.1.1と省略しては書けない

数値の変更について

Rubyの数値データはイミュータブル(変更不可)。 足し算等で数値が変わっているように見えても、それは別オブジェクトが返って来ているにすぎない。

hoge = 1
hoge.object_id
=>3

hoge = hoge + 1
hoge.object_id
=>5

おわりに

整数と浮動小数点数だけでも詳しく見ると結構深いです(まだ把握しきれていない感)。
他にも複素数を表す Complexや 有理数を表す Rationalがあるがそれはまた別の機会にまとめます。

プログラミング言語 Ruby

プログラミング言語 Ruby

  • 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/01/26
  • メディア: 大型本
  • 購入: 21人 クリック: 356回
  • この商品を含むブログ (129件) を見る