1. 程式人生 > >2.2 ruby資料型別--數字(Numeric)

2.2 ruby資料型別--數字(Numeric)

1、數字(Numeric)

(1)數字形式包括整型和浮點型。整數型又分為Fixnum類、Bignum類。

(2)Fixnum是-230到230-1或-262到262-1之間的整數。在這範圍之外的整數是Bignum類。Bignum的數字可以是任意長度,長度限制於電腦的實體記憶體。
#2**62代表2的62次方
irb(main):001:0> a = 2**62
=> 4611686018427387904
irb(main):002:0> b = 2**62 - 1
=> 4611686018427387903
#a.class可以檢視a物件所屬的類
irb(main)
:003:0> a.class #a不在-2^62到2^62-1的範圍內,返回資訊為Bignum類 => Bignum irb(main):004:0> b.class #b在-2^62到2^62-1的範圍內,返回資訊為Fixnum類 => Fixnum
(3)直接定義一個小數,系統會自動識別為浮點型(Float)
irb(main):001:0> a = 5.0
=> 5.0
irb(main):002:0> a.class
=> Float
irb(main):003:0> b = 5
=> 5
irb(main):004:0> b.class
=>
Fixnum

在ruby中,在定義變數是不必提前申明型別的,定義好了之後,系統會自動判斷資料型別。

2、運算子

(1)+、-、*我就不說了,和咱們從小學的數學一樣,沒有特別的地方
(2)/除法:有一個地方需要注意:兩個整數相除,得到的結果是一個整數。如果結果應該是小數,系統會向下取整為整數。
#7/2實際為3.5,整數相除會向下取整為3
irb(main):001:0> a = 7/2
=> 3
#除數和被除數都為浮點型,或者其中一個為浮點型,得到的結果都是浮點型(Float)
irb(main):002:0> b = 7.0/2
=> 3.5
(3)%求模:就是取餘數。
irb(main):001:0> a = 7 % 3
=> 1
(4)** 指數:3**2 指的是3的2次方
(5)== 判斷兩個數是否相等,相等為true,否則為false。這個要注意和equal方法的區別。
irb(main):001:0> 2 == 2
=> true
#用==判斷,整型自動轉換成浮點型,再做對比。
irb(main):002:0> 2 == 2.0
=> true
#用equal判斷,整型不會轉換成浮點型。
irb(main):003:0> 2.equal?(2.0)
=> false
(6)<=> 判斷兩個數是大小關係:a>b返回1、a<b返回-1、a=b返回0。
irb(main):001:0> 4 <=> 2
=> 1
irb(main):002:0> 4 <=> 5
=> -1
irb(main):003:0> 4 <=> 4
=> 0

3、型別轉換

(1)整型轉浮點型:to_f
irb(main):005:0> 1.to_f
=> 1.0
(2)浮點型轉整型:to_i。小數執行to_i時,只保留整數部分,不會四捨五入
irb(main):006:0> 1.8.to_i
=> 1

4、常用函式

(1)num.abs 取num的絕對值
irb(main):007:0> -1.abs
=> 1
(2)num.ceil 返回大於num的最小整數,即向上取整
(3)num.floor 返回小於num的最大整數,即向下取整
irb(main):008:0> 3.2.ceil
=> 4
irb(main):009:0> 3.2.floor
=> 3
(4)num.integer? num是整數返回true,否則返回false
(5)num.negative? num小於0返回true,否則返回false
(6)num.round 四捨五入。預設返回整數,如果想保留n位小數,可以num.round n
irb(main):010:0> 3.1415926.round
=> 3
irb(main):011:0> 3.1415926.round 2
=> 3.14
(7)num1.step(num2,n) {|i| print i } 遍歷num1到num2之間的數字,n是步長值,意思是每隔n個數取一次值,可以不填。

step方法需要結合塊來使用,塊的概念我們後面會講到。目前這個方法先了解一下。

irb(main):001:0> 2.step(8)
#2.step(8)沒有直接得到2到8的遍歷結果,而是得到了一個Enumerator迭代器物件。
#迭代器可以理解成可以被遍歷的一個介面,裡面已經實現了next方法,迭代器通常和“塊”結合使用,從而遍歷出2到8的數字。
=> #<Enumerator: 2:step(8)>
#大括號以及裡面包含的內容{|i| puts i}就是“塊”,塊可以理解成程式碼塊,Ruby中的概念,後面我們會詳細講。
irb(main):001:0> 2.step(8) {|i| puts "輸出此次遍歷的值:#{i}"}
輸出此次遍歷的值:2
輸出此次遍歷的值:3
輸出此次遍歷的值:4
輸出此次遍歷的值:5
輸出此次遍歷的值:6
輸出此次遍歷的值:7
輸出此次遍歷的值:8
=> 2
#3是步長值,2到8之間每隔3取一個數
irb(main):002:0> 2.step(8,3) {|i| puts "輸出此次遍歷的值:#{i}"}
輸出此次遍歷的值:2
輸出此次遍歷的值:5
輸出此次遍歷的值:8
=> 2