Jimmy 的架站筆記

嗨~我是 Jimmy!我可能不是你認識的第 1 個 Jimmy,但一定是最帥的那個。


Ruby 教學 6 - Ruby Integer Object, Ruby Float Object 介紹

By Jimmy 2022-05-28
發表於 ruby 後端筆記
Ruby 教學 6 - Ruby Integer Object, Ruby Float Object 介紹

在 Ruby 中,數字分為兩種 object:Integer 和 Float,分別代表整數和浮點數,兩個 Class 都是從 Numeric object 繼承而來:

num1 = 3
num2 = 3.14

p num1.class
# Integer
p num2.class
# Float
p num1.class.superclass
# Numeric
p num2.class.superclass
# Numeric
Integer, Float 和 Symbol 是 Ruby 中比較特別的 class,無法用 .new 宣告新的 object instance,可以參考這篇資料:Why can't I instantiate Integer class in Ruby? - Stack Overflow

1. 宣告 Ruby Integer, Float Object

1.1 Integer

誠如上面提到的,無法用 class.new 宣告新的 object instance,但可以直接在 Integer class 後面接要宣告的 value,Integer 後面有兩個 argument:

p Integer(10)
# 10
p Integer('10')
# default 為 10 進位
# 10
p Integer('10', 2)
# 2 進位
# 2
p Integer('10', 16)
# 16 進位
# 16

p Integer('0b10')
# 2
# 0b 代表 2 進位
p Integer('010')
# 8
# 0 代表 8 進位
p Integer('0x10')
# 16
# 0b 代表 16 進位

1.2 Float

Float 就沒那麼多變化了,後面直接接要宣告的 Float object value:

num1 = Float(3.14)
num2 = Float("3.14")
num3 = Float(3)

p num1
# 3.14
p num2
# 3.14
p num3
# 3.0

2. Operators

介紹一下 Numeric object 常用到的 operators:

2.1 Equal ==

會比較兩邊的 object 是否相等:

num1 = 3
num2 = 3.0
num3 = "3"

p num1 == num2
# true
p num1 == num3
# false

2.2 Inequal !=

會比較兩邊的 object 是否不等:

num1 = 3
num2 = 3.0
num3 = "3"

p num1 != num2
# false
p num1 != num3
# true

2.3 Spaceship Operator <=>

因為 <=> 長得像 spaceship,因此稱為 spaceship operator。

spaceship operator 常用在 array 的 sort 中。

p 3 <=> 5
# -1
p 7 <=> 5
# 1
p 5 <=> 5
# 0

2.4 Arithmetic Operators

簡單介紹一下四則運算符號:

p 4 + 3
p 4.+(3)
p 4.+ 3
# 7

p 4 - 3
p 4.-(3)
p 4.- 3
# 1

p 4 * 3
p 4.*(3)
p 4.* 3
# 12

p 4 / 3
p 4./(3)
p 4./ 3
p 4.div(3)
# 1

p 4 % 3
p 4.%(3)
p 4.% 3
p 4.modulo(3)
# 1

3. Integer Instance Methods

3.1 Integer odd?/even?

.odd? 和 .even? 用來判斷整數是奇數還是偶數,因此只存在於 Integer object instance,不存在於 Float object instance:

p 3.odd?
# true
p 3.even?
# false
p 3.14.odd?
# Error!

3.2 Integer abs

取絕對值:

num1 = 3
num2 = -3

p num1.abs
# 3
p num2.abs
# 3

3.2 Integer to_f

將 Integer object 轉成 Float object 並回傳:

num = 3

p num.to_f
# 3.0
p num.to_f.class
# Float

3.3 Integer to_s

將 Integer object 轉成 String object 並回傳:

num = 3

p num.to_s
# "3"
p num.to_s.class
# String

4. Float Instance Methods

4.1 Float floor

回傳 <= object 的最大 Integer 或 Float。

沒有 argument 時回傳整數,有 argument 時,argument 為取小數點到幾位。

num1 = 3.14
num2 = 3.64
num3 = -3.14
num4 = -3.64

p num1.floor
# 3
p num2.floor
# 3
p num3.floor
# -4
p num4.floor
# -4

num5 = 12345.6789
num6 = -12345.6789

p num5.floor(1)
# 12345.6
p num5.floor(3)
# 12345.678
p num6.floor(1)
# -12345.7
p num6.floor(3)
# -12345.679

4.2 Float ceil

無條件進位:

num1 = 3.14
num2 = 3.64
num3 = -3.14
num4 = -3.64

p num1.ceil
# 4
p num2.ceil
# 4
p num3.ceil
# -3
p num4.ceil
# -3

num5 = 12345.6789
num6 = -12345.6789

p num5.ceil(1)
# 12345.7
p num5.ceil(3)
# 12345.679
p num6.ceil(1)
# -12345.6
p num6.ceil(3)
# -12345.678

4.3 Float round

四捨五入:

num1 = 3.14
num2 = 3.64
num3 = -3.14
num4 = -3.64

p num1.round
# 3
p num2.round
# 4
p num3.round
# -3
p num4.round
# -4

num5 = 12345.6789
num6 = -12345.6789

p num5.round(1)
# 12345.7
p num5.round(3)
# 12345.679
p num6.round(1)
# -12345.7
p num6.round(3)
# -12345.679

4.4 Float truncate

無條件捨去

num1 = 3.14
num2 = 3.64
num3 = -3.14
num4 = -3.64

p num1.truncate
# 3
p num2.truncate
# 3
p num3.truncate
# -3
p num4.truncate
# -3

num5 = 12345.6789
num6 = -12345.6789

p num5.truncate(1)
# 12345.6
p num5.truncate(3)
# 12345.678
p num6.truncate(1)
# -12345.6
p num6.truncate(3)
# -12345.678

4.5 Floor abs

取絕對值:

num1 = 3.14
num2 = 3.64
num3 = -3.14
num4 = -3.64

p num1.abs
# 3.14
p num2.abs
# 3.64
p num3.abs
# 3.14
p num4.abs
# 3.64

4.6 Float to_i

轉換成 Integer object 後回傳,使用的是 truncate 方法 ( 因此和 .truncate 或是 .truncate(0) 一樣 ):

num1 = 3.14
num2 = 3.64
num3 = -3.14
num4 = -3.64

p num1.to_i
# 3
p num2.to_i
# 3
p num3.to_i
# -3
p num4.to_i
# -3

5. 參考資料

Learn to Code with Ruby
Class: Integer (Ruby 3.1.2)
Class: Float (Ruby 3.1.2)
Class: Numeric (Ruby 3.1.2)


你可能也會喜歡

【 Node.js 】如何在 Node.js 中建立 TypeScript 的環境

【 Node.js 】如何在 Node.js 中建立 TypeScript 的環境

最近開始在學習用 TypeScript 建立前後端,簡單筆記一下該如何在 Node.js 中建立 TypeScript 的環境。 1. 什麼是 TypeScript? TypeScript 是為了彌補 JavaScript 不足的地方而誕生的語言,最主要的差別就在於宣告變數或是執行函數時需要指定 type ,不過這篇的重點在於在 Node.js 中建立 TypeScript 的環境,所以就不描述

Read More