浮點

浮點數 在 Elixir

8 個練習

關於 浮點數

在 Elixir 裡,數字分成兩種:整數和浮點數。

浮點數是帶有一位或多位小數的數字。它們使用 64 位元雙精度浮點數格式。

float = 3.45
# => 3.45

Elixir 也支援浮點數的科學記號表示法。

1.25e-2
# => 0.0125

捨入誤差

浮點數的捨入誤差可說是惡名昭彰。

0.1 + 0.2
# => 0.30000000000000004

不過,這類錯誤並非 Elixir 獨有,所有程式語言都會發生。這是因為電腦上的所有資料都以二進位碼儲存和處理。在二進位中,只有分母可以表示為 2^n 的分數(例如 1/4、3/8、5/16)才能精確表示,其他分數則以近似值表示。

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

你可以到 0.30000000000000004.com 進一步了解這個問題。Float Toy 頁面 則有很棒的圖解,說明浮點數的位元如何轉換成實際的浮點數值。

比較

若值相同,整數和浮點數可被視為相等(==)。不過,由於型別不同,它們永遠不會嚴格相等(===)。

1 == 1.0
# => true

1 === 1.0
# => false

轉換

整數和浮點數可以混合在單一算術運算式中。運算式中只要用到浮點數,就能確保結果也會是浮點數。

2 * 3
# => 6

2 * 3.0
# => 6.0

浮點數可以四捨五入(round)、無條件進位(ceil)或無條件捨去(floor)。

要將浮點數四捨五入為浮點數,請使用 Float 模組的函式(Float.round、Float.ceil、Float.floor)。若要改為取得整數,請使用 Kernel 模組的函式(round、ceil、floor)。

將浮點數轉為整數的另一種方法,是用 trunc 截去它的小數部分。

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 浮點數

練習已鎖定

再解鎖 4 個練習,就能練習 浮點數