1. 語法

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

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

例如: 

puts 100    # 100
puts 0x100  # 256
puts 0100   # 64
puts 0b100  # 4

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

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. 數值的範圍

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

3. 特殊的數值

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

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

通常是除以零產生:

puts 1.0 / 0    # Infinity
puts -1.0 / 0   # -Infinity
puts 0.0 / 0.0  # NaN

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

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

4. 轉型

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

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

5. 近似值

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

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

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

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

6. 更多函式

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

puts 1.1.ceil # 2
puts -1.1.abs # 1.1

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

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

相关文章