語法

Ruby 的數字型別許多衍生的類別,本文將針對整數和浮點數介紹。從整數的角度來看,它可以用以下四種寫法:

  1. 十進位制。
  2. 十六進位制,0x 開頭。
  3. 八進位制,0 開頭。
  4. 二進位制,0b 開頭。

例如:

1
2
3
4
puts 100    # 100
puts 0x100 # 256
puts 0100 # 64
puts 0b100 # 4

浮點數的部分則必須寫出小數點或科學記號表示:

1
2
3
4
5
6
7
puts 1.23     # 1.23
puts 12e3 # 12000.0
puts 12E-3 # 0.012
puts 1.0 / 3 # 0.3333333333333333
puts 1 / 3 # 0, 特別注意
puts 10 / 3 * 1.1 # 3.3000000000000003
puts 10.0 / 3 * 1.1 # 3.666666666666667

尤其要注意的是除法的部分,如果前面的數字是整數,結果可能不如預期。

數值的範圍

整數的部分會自動轉換成大數型別,所以理論上是正負無窮大,浮點數的部分則介於 2.2250738585072014e-3081.7976931348623157e+308,可利用 Float::MINFloat::MAX 取得常數。

特殊的數值

浮點數中包含三個特殊的數值:

  1. 正無窮大 (Infinity)
  2. 負無窮大 (-Infinity)
  3. 非數值 (NaN)

通常是除以零產生:

1
2
3
puts 1.0 / 0    # Infinity
puts -1.0 / 0 # -Infinity
puts 0.0 / 0.0 # NaN

可以分別利用 finite?, infinite?nan? 的函式來進行判斷:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
p (1.0 / 0).finite?   # false
p (-1.0 / 0).finite? # false
p (0.0 / 0.0).finite? # false
p (1.0).finite? # true

p (1.0 / 0).infinite? # 1
p (-1.0 / 0).infinite? # -1
p (0.0 / 0.0).infinite? # nil
p (1.0).infinite? # nil

p (1.0 / 0).nan? # false
p (-1.0 / 0).nan? # false
p (0.0 / 0.0).nan? # true
p (1.0).nan? # false

轉型

同樣利用內建的函式進行轉型:

1
2
3
4
5
6
p 1.1.to_s # "1.1"
p 1.1.to_i # 1
p 1.1.to_f # 1.1
p 1.to_s # "1"
p 1.to_i # 1
p 1.to_f # 1.0

近似值

在電腦世界中的浮點數其實只是近似值,浮點數中的整數可能只是精確度到達一定程度而已,例如下面的例子:

1
2
puts 0.1 + 0.7        # 0.7999999999999999
puts 0.1 + 0.7 == 0.8 # false

可以利用內建的 round 函式四捨五入小數點位數後在進行比較,例如以下是取小數點 4 位

1
puts (0.1 + 0.7).round(4) == 0.8 # true

更多函式

由於 Ruby 的物件導向設計,讓數字本身內建了更多函式,包含數學運算和迴圈控制,使用上更直覺,例如:

1
2
3
4
5
6
7
puts 1.1.ceil # 2
puts -1.1.abs # 1.1

# 進行3次迴圈
3.times do |i|
print i # 012
end

更多的用法將在以後的文章進一步說明。

延伸閱讀

上一篇 Ruby 教學 - Nil, True 和 False
下一篇 Ruby 教學 - 字串 (String)