数值类

数值类的构成

Numeric
    Integer(整数)
        Fixnum(普通整数)
        Bignum(大整数)
    Float(浮点)
    Rational(有理数)
    Complex(复数)

整数

p 1024.class
#=> Fixnum

p (2**1000).class
#=> Bignum

有理数

a = Rational(2, 5)
b = Rational(1, 3)
p a
#=> (2/5)

p b
#=> (1/3)

c = a + b
p c
#=>(11/15)


p c.to_f
#=> a = Rational(2, 5)
b = Rational(1, 3)
p a
#=> (2/5)

p b
#=> (1/3)

c = a + b
p c
#=>(11/15)

p c.to_f
#=> 0.733333333333333

复数

#Complex(实数, 虚数)
c = Complex(0, 2) ** 2
p c
#=> (-4+0i)

Math模块

其实就是各种正弦,余弦函数

p Math.sqrt(2)

数值类型转换

p 10.to_f
p 10.8.to_i

p "123".to_i
p "12.3".to_f

#对小数部分四舍五入
p 1.2.round
p 1.8.round

#比接受者大的最小整数
p 1.5.ceil
#=> 2

#比接受者小的最小整数
p 1.5.floor
#=> 1

随机数

#返回比1小的浮点数
p Random.rand

#返回0-100之间的数
p Random.rand(100)

#指定范围
p Random.rand(100000..999999)

计数

n.times{|i|...}

ary = []
10.times do |i|
    #相当于php的 ary[] = i
    ary << i
end

p ary

from.upto(to){|i|...}

ary = []

#(2..10).each
2.upto(10) do |i|
    ary << i
end

p ary

from.downto(to){|i|...}

ary = []

#10~2,注意10..2不能用
10.downto(2) do |i|
    ary << i
end

p ary

form.step(to, step){...}

ary = []
2.step(10, 3) do |i|
    ary << i
end
p ary
#=> [2, 5, 8]
ary = []
10.step(2, -3) do |i|
    ary << i
end
p ary
#=> [10, 7, 4]

collect

ary = 2.step(10).collect{ |i| i * 2 }
p ary
#=> [4, 6, 8, 10, 12, 14, 16, 18, 20]