はじめに
基礎からRubyの勉強をし直そうということでプログラミング言語 Rubyをガッツリ読み直していると、普段何気なく使ってる数値も深く書かれているので少しまとめます。
数値について
全ての数値オブジェクトは Numeric
クラスのインスタンス。整数であったり浮動小数点数であったりすると Integer
クラスや Flort
クラスのインスタンスになったりする。
種類
整数リテラル
単純に数字を並べればリテラルになる
1234 0 85943
クラスは Fixnum
と Bignum
の二つで、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
があるがそれはまた別の機会にまとめます。
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 356回
- この商品を含むブログ (129件) を見る