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
更多的用法将在以后的文章进一步说明。