Ruby教學 - 數字(Numeric)
1. 語法
Ruby的數字型別許多衍生的類別,本文將針對整數和浮點數介紹。從整數的角度來看,它可以用以下四種寫法:
- 十進位制。
- 十六進位制,0x開頭。
- 八進位制,0開頭。
- 二進位制,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::MIN和Float::MAX取得常數。
3. 特殊的數值
浮點數中包含三個特殊的數值:
- 正無窮大(Infinity)
- 負無窮大(-Infinity)
- 非數值(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
更多的用法將在以後的文章進一步說明。