在程式中的運算可能跟我們平常接觸的會不一樣,ruby 也是!因此來瞭解一下吧!
integer
1
2
3
4
5
6
7
8
9
10
11
| 1.class
#=> Fixnum
(2/3).class
#=> Fixnum
#20 位數會開始變成 Bignum
('1'+'0'*18).to_i.class
#=> Fixnum
('1'+'0'*19).to_i.class
#=> Bignum
1.2.to_i
#=> 1
|
float
只要分子或分母出現浮點數,結果才會是 float
兩個運算元皆為整數,則會進行截尾整數除法(truncating integer division)運算
1
2
3
4
5
6
7
8
9
10
| 3.14.class
#=> Float
1/2
#=> 0
1/2.0
#=> 0.5
1.0/2
#=> 0.5
1.to_f
#=> 1.0
|
運算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| 餘數
10%3
#=> 1
次方
2**10
#=> 1024
2**-1
#=> (1/2)
絕對值
-1234.abs
#=> 1234
四捨五入
(3.3).round
#=> 3
(4.5).round
#=> 5
回傳小於該數學的最大整數
(2.1).floor
#=> 2
(-2.1).floor
#=> -3
回傳大於該數學的最小整數
(2.1).ceil
#=> 3
(-2.1).ceil
#=> -2
#只適用於Fixnum
2.zero?
#=> false
0.zero?
#=> true
1.0 / 0 # Infinity
-1.0 / 0 # -Infinity
0.0 / 0.0 # NaN
|
BigDecimal
主要是用來做精確的數字
1
2
3
4
5
6
7
| sum = 0
for i in (1..10000)
sum = sum + 0.0001
end
print sum
#=> 0.9999999999999062
#因為在電腦中的浮點數其實只是近似值,浮點數中的整數可能只是精確度到達一定程度而已
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| require 'bigdecimal'
sum = BigDecimal.new("0")
for i in (1..10000)
sum = sum + BigDecimal.new("0.0001")
end
print sum
#=> 0.1E1
E代表後面有幾個10的次方
0.1E1 = 0.1 * (10**1)
#=> 1.0
0.2E1 = 0.2 * (10**1)
#=> 2.0
0.2E2 = 0.2 * (10**2)
#=> 20.0
2E3 = 2 * (10**3)
#=> 2000.0
|
官方文件:
參考文件: