請輸入要捨入的數值和「要取到哪一位」。會一起顯示四捨五入、無條件進位、無條件捨去,以及特殊捨入方式的結果。
這個頁面可以做什麼
- 只要輸入數值和「要取到哪一位」,就能一次知道四捨五入、無條件進位、無條件捨去的結果
- 不只個位(取到整數),小數第二位、十位、百位等,想取到哪一位都可以
- 銀行家捨入法(四捨六入五成雙)、地板函數、天花板函數等,電腦和統計領域使用的捨入方式,結果也能一覽確認
- 淺顯易懂的公式解說,以及可直接複製到 Excel、Google 試算表、Python 的公式,也都整理在這個頁面
這個計算有什麼用?
在台灣,未稅價 NT$398 的商品,營業稅(5%)是 19.9 元。依營業稅法第 14 條,稅額不滿 1 元的尾數要四捨五入,所以稅額是 20 元。
用含稅價反推未稅價和稅額時,每一筆都四捨五入,加總起來就可能和自己算的差 1 元——這不是算錯,而是捨入造成的尾差。了解這一點,對帳時就能放心確認發票和帳單。
依台灣的勞動基準法第 24 條,平日延長工時的前 2 小時,要按每小時工資再加給 1/3 以上。時薪 200 元的人,每小時加班費是 \(200 \times \dfrac{4}{3} = 266.66\cdots\) 元,取到元時,四捨五入是 267 元,無條件捨去是 266 元(也有公司直接用 1.34 倍算成 268 元)。
薪資單上的金額就是由這樣的捨入累積而成,懂得捨入,就能自己驗算自己的薪水。
3 個選項幾乎各占 3 分之 1 時,四捨五入到小數第一位會變成 33.3% + 33.3% + 33.3% = 99.9%,加起來不是 100%。
這不是統計錯誤,而是捨入的必然結果,報紙和新聞的圖表也會註明「因四捨五入,合計可能不等於 100%」。懂得捨入,就能正確解讀統計和圖表。
用寬 0.9 m 的壁紙貼 8.4 m 寬的牆,需要 8.4 ÷ 0.9 ≈ 9.33 捲,要買的是 10 捲(9 捲不夠)。
依人數準備的桌子數、遊覽車的台數、藥的盒數等,「不夠就麻煩」的情況下,正確答案不是四捨五入而是無條件進位——選對捨入方式,也是取概數的一部分。
「剛好一半總是進位」的四捨五入,在大量資料中會讓總和或平均數稍微往大的方向偏。例如 0.5, 1.5,…, 9.5 這 10 個數的平均數其實是 5.0,但先四捨五入再平均就會變成 5.5。用銀行家捨入法的話,進位和捨去各占一半、偏差互相抵消,平均數仍然是 5.0。
所以在反覆計算利息的金融領域,以及許多程式語言的小數計算內部(IEEE 754 標準),銀行家捨入法都是標準做法。
公式
符號與用語解說
符號
| \(x\) | x | 要捨入的數值。(例:考試的平均分數 81.35) |
| \(n\) | n | 指定要取到哪一位。0=個位,正數=小數第 \(n\) 位,負數=十位、百位、千位……(例:取到百位就是 \(n = -2\)) |
| \(q\) | q | 捨入的單位。捨入的結果一定是 \(q\) 的倍數。\(q = 10^{-n}\),取到小數第二位是 \(0.01\),取到百位是 \(100\)。 |
| \(R\) | R | 捨入後的數值。捨入方式(四捨五入、無條件進位、無條件捨去等)不同,值也會不同。 |
| \(\lfloor x \rfloor\) | 地板函數(floor) | 小於或等於 \(x\) 的最大整數。正數時和「小數點以下無條件捨去」相同。(例:\(\lfloor 5.99 \rfloor = 5\)。但負數時 \(\lfloor -5.01 \rfloor = -6\))台灣的高中課本用高斯符號 \([x]\) 表示同樣的意思。 |
| \(\lceil x \rceil\) | 天花板函數(ceiling) | 大於或等於 \(x\) 的最小整數。正數時和「無條件進位」相同。(例:\(\lceil 5.01 \rceil = 6\)。但負數時 \(\lceil -5.01 \rceil = -5\)) |
用語
| 捨入 (取概數) |
把太細的位數(尾數)依照決定好的規則,換成整齊的數。四捨五入、無條件進位、無條件捨去都是捨入的一種。 |
| 概數 | 像「約 1900 人」這樣的大約的數。台灣在國小四年級學「取概數」,方法有四捨五入、無條件進入法、無條件捨去法。 |
| 四捨五入 | 要看的那一位數字是 0~4(4 以下)就捨去,5~9(5 以上)就進位的捨入方式。剛好一半(2.5 等)一定進位(負數往離 0 較遠的方向。−2.5 → −3)。 |
| 無條件進位 | 只要有一點點尾數,就往上一位進 1 的捨入方式,課本稱為「無條件進入法」。5.01 無條件進位取到整數是 6。用在「不夠就麻煩」的情況(材料的數量等)。 |
| 無條件捨去 | 把尾數全部去掉的捨入方式,課本稱為「無條件捨去法」。5.99 無條件捨去取到整數是 5。常用在去掉零頭、計算預算能買幾個等跟錢有關的場合。 |
| 銀行家捨入法 (四捨六入五成雙) |
只有剛好一半時,才捨入到「結果是偶數的那一側」的方式(2.5 → 2、3.5 → 4)。和剛好一半一定進位的四捨五入不同,總和或平均數不容易產生偏差,所以是統計、金融、電腦內部的標準做法。Python 的 round() 也是這種方式。 |
| 地板函數 | 寫成 \(\lfloor x \rfloor\),把數捨入到「不超過 \(x\) 的最接近的整數(−∞ 方向)」的數學函數,台灣高中稱為高斯符號 \([x]\)。正數時和無條件捨去一致,但負數時方向會改變,這是和實務上的無條件捨去不同的地方。 |
| 天花板函數 | 寫成 \(\lceil x \rceil\),把數捨入到「不小於 \(x\) 的最接近的整數(+∞ 方向)」的數學函數。正數時和無條件進位一致,但負數時方向會改變,這是和實務上的無條件進位不同的地方。 |
建議先了解的基礎知識
為了能「理解意思」地使用這個頁面的計算,這裡整理了建議先了解的基礎知識。
| 位值(國小二~三年級,7~9 歲) |
|
| 小數的結構(國小三~四年級,8~10 歲) |
|
| 概數與四捨五入(國小四年級,9~10 歲) |
|
| 負數與數線(國中七年級,12~13 歲) |
|
用 Excel 計算的方法
| 要捨入的數值 x | 2.7 |
| 四捨五入的結果 | =ROUND(B1,0) |
| 要捨入的數值 x | 5.01 |
| 無條件進位的結果 | =ROUNDUP(B1,0) |
| 要捨入的數值 x | 5.99 |
| 無條件捨去的結果 | =ROUNDDOWN(B1,0) |
| 要捨入的數值 x | 1234.5678 |
| 要取到的位數 n(2=小數第二位,0=個位,-2=百位) | -2 |
| 四捨五入的結果 | =ROUND(B1,B2) |
ROUND、ROUNDUP、ROUNDDOWN 的第 2 個引數「位數」,和這個頁面的「要取到哪一位」意思相同(0=個位,2=小數第二位,-2=百位)。
Excel 的 ROUND 和這個頁面的四捨五入一樣,是「剛好一半往離 0 較遠的方向」。ROUNDUP、ROUNDDOWN 在負數時是「往離 0 較遠、較近的方向」(ROUNDUP(-5.01,0) 是 -6)。
以第 1 個表為例,B2 會顯示 3;第 4 個表的 B3 會顯示 1200。
用 Google 試算表計算的方法
| 要捨入的數值 x | 2.7 |
| 四捨五入的結果 | =ROUND(B1,0) |
| 要捨入的數值 x | 5.01 |
| 無條件進位的結果 | =ROUNDUP(B1,0) |
| 要捨入的數值 x | 5.99 |
| 無條件捨去的結果 | =ROUNDDOWN(B1,0) |
| 要捨入的數值 x | 1234.5678 |
| 要取到的位數 n(2=小數第二位,0=個位,-2=百位) | -2 |
| 四捨五入的結果 | =ROUND(B1,B2) |
用 Python 計算的方法
from decimal import Decimal, ROUND_HALF_UP, ROUND_UP, ROUND_DOWN
number = Decimal("1234.5678") # 要捨入的數值(為了避開 0.1 的誤差問題,一定要用字串傳入)
digits = -2 # 要取到的位數(2=小數第二位、0=個位、-2=百位)
unit = Decimal(1).scaleb(-digits) # 捨入的單位(-2 就是 100)
rounded = number.quantize(unit, rounding=ROUND_HALF_UP) # 四捨五入
rounded_up = number.quantize(unit, rounding=ROUND_UP) # 無條件進位(往離 0 較遠的方向)
rounded_down = number.quantize(unit, rounding=ROUND_DOWN) # 無條件捨去(往離 0 較近的方向)
print(f"四捨五入: {rounded:f}")
print(f"無條件進位: {rounded_up:f}")
print(f"無條件捨去: {rounded_down:f}")
用 LaTeX 等數學式語言的寫法(可直接複製)
R = ⌊x + 0.5⌋
R = \lfloor x + 0.5 \rfloor
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>R</mi>
<mo>=</mo>
<mo>⌊</mo>
<mi>x</mi>
<mo>+</mo>
<mn>0.5</mn>
<mo>⌋</mo>
</mrow>
</math>
R = |__ x + 0.5 __|
Floor[x + 0.5]
R := floor(x + 0.5);
R = floor(x + 0.5);
R = ⌊x + 0.5⌋
R = ⌈x⌉
R = \lceil x \rceil
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>R</mi>
<mo>=</mo>
<mo>⌈</mo>
<mi>x</mi>
<mo>⌉</mo>
</mrow>
</math>
R = |~ x ~|
Ceiling[x]
R := ceil(x);
R = ceil(x);
R = ⌈x⌉
R = ⌊x⌋
R = \lfloor x \rfloor
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>R</mi>
<mo>=</mo>
<mo>⌊</mo>
<mi>x</mi>
<mo>⌋</mo>
</mrow>
</math>
R = |__ x __|
Floor[x]
R := floor(x);
R = floor(x);
R = ⌊x⌋
R = ⌊x ÷ q + 0.5⌋ × q
R = \left\lfloor \frac{x}{q} + 0.5 \right\rfloor \times q
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>R</mi>
<mo>=</mo>
<mo>⌊</mo>
<mfrac><mi>x</mi><mi>q</mi></mfrac>
<mo>+</mo>
<mn>0.5</mn>
<mo>⌋</mo>
<mo>×</mo>
<mi>q</mi>
</mrow>
</math>
R = |__ x/q + 0.5 __| xx q
Floor[x/q + 0.5] q
R := floor(x/q + 0.5) * q;
R = floor(x/q + 0.5) * q;
R = ⌊x/q + 0.5⌋ × q
請 ChatGPT 幫忙計算的方法
你是數值計算的助理。請務必實際執行 Python 程式碼來進行下面的計算,並只以執行結果的數值作為回答的根據(不要用心算或推測回答)。Python 內建的 round() 是銀行家捨入法,請不要使用,改用 decimal 模組(ROUND_HALF_UP 等)。 請把數值 1234.5678 用下面 3 種方式取到百位: 1. 四捨五入(剛好一半往離 0 較遠的方向) 2. 無條件進位(往離 0 較遠的方向) 3. 無條件捨去(往離 0 較近的方向) 請列出計算用的程式碼,以及執行結果的數值。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權