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

更多的用法将在以后的文章进一步说明。

相关文章