報價表上的五列金額看起來都是整數,逐列加起來是 13,423,最下面的合計欄卻顯示 13,422。差的這 1 元不大,客戶拿到報價單一加就看得出來,也會開口問哪一邊算錯了。這類落差多半出在 Excel四捨五入的做法,而不是公式本身算錯。
問題通常從折扣開始。85 折一乘,1,290 元的名片設計變成 1,096.5,3 式 1,530 元的海報設計變成 3,901.5,帶著小數的金額被格式顯示成整數,畫面看起來整齊,儲存的數字卻沒有變。Excel 把數字整理成整數有兩條路,一條只改畫面,另一條才會真的改掉儲存的數字;選錯了,合計就會跟各列對不起來。
真正把數字改掉的是 ROUND函數。它的語法只有兩個引數,學會之後,無條件進位、無條件捨去也都是在同一套位數規則上換個方向,要進位到 50 元的倍數,再換成倍數函數即可。這幾個函數共用的起點,是先弄清楚位數這個引數指的是哪一個位置。
Excel四捨五入用 ROUND函數,兩個引數就夠
想把數字整理到指定的位置,最直接的做法是 ROUND函數,公式長這樣:
=ROUND(數字, 位數)Code language: Excel (excel)
第一個引數放要處理的數字,第二個引數放要保留到哪一位,兩個都不能省。位數大於 0 時,數字會四捨五入到指定的小數位數;位數等於 0 時,會取到最接近的整數;位數小於 0 時,則往小數點左邊走,整理到十位、百位或千位。
這個位數規則也是 ROUNDUP、ROUNDDOWN 的地基,兩者的語法跟 ROUND 一模一樣,只是把方向固定成進位或捨去。
ROUND 兩個引數 number 與 num_digits 的分工
Microsoft 的說明頁把這兩個引數稱為 number 與 num_digits,前者是要處理的數字,後者是位數,兩個引數之間用半形逗號隔開。函數名稱在繁體中文版 Excel 一樣照英文輸入,不用另外找中文名稱。第一個引數可以是儲存格,也可以是一條會算出數字的算式,以報價表 E2 的折後小計 1,096.5 為例,=ROUND(E2,0) 的結果是 1,097。
第二個引數決定留到哪一位。最常見的兩個需求各有一條公式,想取整數元,位數寫 0,=ROUND(E2,0);想留兩位小數,位數寫 2,=ROUND(E2,2)。再看兩個小數的例子,=ROUND(2.15,1) 得 2.2,=ROUND(2.149,1) 得 2.1,判斷依據都是小數第二位,一個是 5、一個是 4,由它決定小數第一位要不要進位。
位數為正、為 0 與為負時的保留位置
同一個數字 1,234.5678,換 7 個位數會得到 7 種結果,下表可以一次看完:
| 位數 | 公式 | 結果 | 保留到 |
|---|---|---|---|
| 3 | =ROUND(1234.5678,3) | 1,234.568 | 小數第 3 位 |
| 2 | =ROUND(1234.5678,2) | 1,234.57 | 小數第 2 位 |
| 1 | =ROUND(1234.5678,1) | 1,234.6 | 小數第 1 位 |
| 0 | =ROUND(1234.5678,0) | 1,235 | 個位 |
| -1 | =ROUND(1234.5678,-1) | 1,230 | 十位 |
| -2 | =ROUND(1234.5678,-2) | 1,200 | 百位 |
| -3 | =ROUND(1234.5678,-3) | 1,000 | 千位 |
最容易記反的是負數位數。負號代表往小數點左邊走,-1 是十位,-2 是百位,-3 是千位,所以報價想整理到百元,位數就寫 -2。要整理到的位置比數字本身的最高位還高時,結果會變成 0,或是直接進到下一個單位,例如 =ROUND(1.98,-1) 得 0,=ROUND(626.3,-3) 得 1,000。

另一個容易誤判的是 =ROUND(21.5,-1)。這個數字帶著 .5,很容易讓人以為要進位成 30,其實位數 -1 只看個位數字,個位是 1,不到 5,所以結果是 20,小數部分完全不參與判斷。
尾數剛好是 5 時,正負數都往遠離 0 的方向
尾數剛好是 5 的時候,ROUND 一律進位,而且正負數是對稱的,正數往更大的方向進,負數則往更小的方向進,也就是離 0 更遠。前面的 =ROUND(2.15,1) 得 2.2,換成負數,=ROUND(-1.475,2) 得 -1.48,兩個例子的方向一致。
拿報價表來看,E2 的 1,096.5 用 =ROUND(E2,0) 得 1,097。同一筆金額如果是折讓,也就是 -1,096.5,=ROUND(-1096.5,0) 得 -1,097。
所以一筆金額和它的折讓各自取整之後,絕對值會一樣,正負號相反,加起來剛好抵銷,不會出現一邊進位、一邊捨去的情況。
在折扣報價表裡算出整數元的小計
學會語法之後,最值得練習的是整張報價表。下面是虛構的龐果設計報價表,A 欄是品項,B 欄是數量,C 欄是單價,D 欄是折扣 0.85,資料從第 2 列開始放到第 6 列:
| 品項 | 數量 | 單價 | 折扣 |
|---|---|---|---|
| 名片設計 | 1 式 | 1,290 | 0.85 |
| DM 單張設計 | 2 式 | 870 | 0.85 |
| 海報設計 | 3 式 | 1,530 | 0.85 |
| 社群貼文模板 | 5 式 | 690 | 0.85 |
| 型錄內頁排版 | 4 式 | 1,180 | 0.85 |
折扣 0.85 很適合拿來示範,因為它常把整數乘出 .5 的尾數,正好是四捨五入最需要處理的情況。E 欄要放折後小計,F 欄放取整後的金額。
步驟一,先用乘法算出帶小數的折後小計
在 E2 輸入下面的公式,按 Enter,再把儲存格右下角的填滿控點往下拖到 E6:
=B2*C2*D2Code language: Excel (excel)
E2 到 E6 會依序算出 1,096.5、1,479、3,901.5、2,932.5、4,012,其中有 3 列帶著 .5。
原因在於 0.85 等於 17/20,數量乘單價之後只要是 20 的倍數,結果就是整數,不是的話就會留下尾數。DM 單張設計是 2 × 870 = 1,740,型錄內頁排版是 4 × 1,180 = 4,720,剛好都是 20 的倍數,所以是整數。名片設計的 1,290、海報設計的 4,590、社群貼文模板的 3,450 都不是 20 的倍數,乘完折扣之後尾數剛好是 .5。
步驟二,輸入 ROUND 公式並指定位數
在 F2 輸入下面這條公式,位數寫 0,代表取整數元:
=ROUND(E2,0)Code language: Excel (excel)
直接在儲存格或編輯列輸入就可以,不需要特地從選單裡找函數。E2 的 1,096.5 在 F2 變成 1,097。
位數放在公式的最後一個位置,改這個數字就能改變保留到哪一位。報價想整理到十元,就把 0 換成 -1,=ROUND(E2,-1) 會把 1,096.5 變成 1,100。Excel四捨五入公式平常最常調整的,就是最後這個位數。
步驟三,往下複製並核對每一列
選取 F2,拖曳儲存格右下角的填滿控點到 F6,五列結果依序是 1,097、1,479、3,902、2,933、4,012。公式裡的 E2 會隨著列數自動變成 E3、E4……,這是相對參照,不用逐列重新輸入。
核對時看兩件事就夠了。第一件是帶 .5 的三列有沒有進位,也就是 1,096.5 變成 1,097、3,901.5 變成 3,902、2,932.5 變成 2,933。第二件是本來就是整數的兩列有沒有維持不變,=ROUND(1479,0) 仍然是 1,479,4,012 也還是 4,012。ROUND 只會動有尾數的數字,整數丟進去不會被改動。

ROUND 直接包住整條乘法算式的寫法
不想多開一欄的話,也可以直接寫成下面這樣,一格就完成,第一列同樣得到 1,097:
=ROUND(B2*C2*D2,0)Code language: Excel (excel)
任何會算出數字的公式都能放進 ROUND 的第一個引數,除法也一樣,例如 =ROUND(C2/B2,0)。
代價是公式變長,而且看不到取整之前的金額。需要留著原始小數、讓自己或客戶回頭對帳時,分成兩欄比較清楚;如果只需要最後的整數,報價表又沒有其他地方會引用取整前的金額,單格寫法就夠用。
無條件進位用 ROUNDUP,捨去用 ROUNDDOWN
ROUND 會看尾數大小來決定進位或捨去,有些情境卻不能看尾數。把函數名稱換成 ROUNDUP 或 ROUNDDOWN,語法一模一樣,位數的規則也完全相同,差別只在方向固定,ROUNDUP 有尾數就進位,ROUNDDOWN 有尾數就捨去。
Excel無條件進位和 Excel無條件捨去這兩個需求,用的就是這一對函數。選哪一個,取決於這個數字是不能少,還是不能多。
ROUNDUP 只要有尾數就進位,適合算包數
貼紙每包 25 張,客戶要 130 張。=130/25 得 5.2 包,出貨不可能只出 5.2 包,只出 5 包又會數量不夠。這時用 Excel無條件進位的公式 =ROUNDUP(130/25,0),結果是 6 包,實際出貨 150 張。
ROUNDUP 不看尾數大小,尾數再小也進位,=ROUNDUP(5.001,0) 一樣得 6。其他常見的例子如下:
=ROUNDUP(3.2,0)得 4=ROUNDUP(76.9,0)得 77=ROUNDUP(3.14159,3)得 3.142=ROUNDUP(31415.92654,-2)得 31,500
位數的規則和 ROUND 相同,最後一個例子位數是 -2,所以進位到百位。算包數、算箱數、算需要幾張紙這類不能少的數量,都適合用 ROUNDUP。
ROUNDDOWN 不看尾數大小,適合報價抹零
報價尾數想抹零,可以用 =ROUNDDOWN(E5,-1),把社群貼文模板的 2,932.5 抹到 2,930。位數 -1 是整理到十位,個位的 2 和後面的 .5 都直接丟掉。
ROUNDDOWN 完全不看尾數大小,尾數是 .9 也一樣捨去。=ROUNDDOWN(76.9,0) 得 76,=ROUNDDOWN(3.2,0) 得 3,=ROUNDDOWN(3.14159,3) 得 3.141,=ROUNDDOWN(31415.92654,-2) 得 31,400。
這個函數對客戶是讓利,對自己是少收,用之前要先確認抹零的規則,是只抹個位,還是抹到十位。規則定好之後,公式只是照著執行。
同一個數字在 3 個函數下的結果對照
取整數元時,三個函數只差在對尾數的處理。拿 1,096.2、1,096.5、1,096.8 三個數字來對照:
| 數字 | ROUND | ROUNDUP | ROUNDDOWN |
|---|---|---|---|
| 1,096.2 | 1,096 | 1,097 | 1,096 |
| 1,096.5 | 1,097 | 1,097 | 1,096 |
| 1,096.8 | 1,097 | 1,097 | 1,096 |
ROUNDUP 三列都是 1,097,ROUNDDOWN 三列都是 1,096,只有 ROUND 會隨著尾數大小改變方向。位數換成 -1、-2,差別還是一樣,以海報設計的 3,901.5 為例:
| 位數 | ROUND | ROUNDUP | ROUNDDOWN |
|---|---|---|---|
| -1 | 3,900 | 3,910 | 3,900 |
| -2 | 3,900 | 4,000 | 3,900 |
位數 -2 時,ROUNDUP 直接進到 4,000,ROUND 與 ROUNDDOWN 都停在 3,900。三個函數沒有哪一個比較好,差別在於報價規則要的是一律進、一律捨,還是照尾數大小決定。

折讓與退款是負數時,進位和捨去以 0 為基準
報價表除了正數金額,還會有折讓、退款這類負數。進位和捨去在負數上的意思,是以離 0 的遠近來定義,不是數線上的左右。ROUNDUP 把數字推離 0,ROUNDDOWN 把數字拉向 0,所以對負數來說,進位反而會讓數字變得更小。
INT 與 TRUNC 也會取整數,但它們不是四捨五入,在負數上的表現還彼此不同。
ROUNDUP 遠離 0,ROUNDDOWN 趨近 0
先看小數的例子,=ROUNDUP(-3.14159,1) 得 -3.2,=ROUNDDOWN(-3.14159,1) 得 -3.1。-3.2 在數線上比 -3.1 更小,但它的絕對值更大,離 0 更遠。
換成報價表的折讓 -1,096.2,=ROUNDUP(-1096.2,0) 得 -1,097,=ROUNDDOWN(-1096.2,0) 得 -1,096。
所以進位不等於變大。折讓單上的 -1,096.2 進位成 -1,097,數線上變小了,折讓的金額卻變大了。用 ROUNDDOWN 則剛好相反,折讓的金額變小。判斷時看絕對值,不看數線的左右,就不容易混淆。

INT 與 TRUNC 取整數,負數的結果不同
INT 只有一個引數,傳回不大於這個數字的最大整數,所以 =INT(8.9) 得 8,=INT(-8.9) 得 -9。TRUNC 則是直接去掉小數,=TRUNC(8.9) 得 8,=TRUNC(-8.9) 得 -8。TRUNC 還有第二個引數可以指定位數,省略時當作 0。
數字是正數時,兩者的結果相同;數字是負數時,INT 會往更小的方向走,TRUNC 則往 0 靠近,例如 =TRUNC(-4.3) 得 -4,=INT(-4.3) 得 -5。
跟前面的 ROUNDDOWN 對照,=ROUNDDOWN(-8.9,0) 得 -8,方向與 TRUNC 相同、與 INT 相反。INT 還有一個常見用途,就是搭配減法取出小數部分,假設 A2 是 19.5,=A2-INT(A2) 得 0.5。這三個函數都不看尾數大小,也不是四捨五入。
5 個取整函數處理負數折讓的結果
拿 -1,096.2 與 -1,096.5 兩筆折讓,對照五個函數取整數元的結果:
| 數字 | ROUND | ROUNDUP | ROUNDDOWN | INT | TRUNC |
|---|---|---|---|---|---|
| -1,096.2 | -1,096 | -1,097 | -1,096 | -1,097 | -1,096 |
| -1,096.5 | -1,097 | -1,097 | -1,096 | -1,097 | -1,096 |
ROUND 的方向會隨尾數改變,尾數到 5 以上才離 0 更遠。ROUNDUP 與 INT 在這兩列都得到 -1,097,ROUNDDOWN 與 TRUNC 則都得到 -1,096。
數字換成正數,INT、TRUNC、ROUNDDOWN 取整數的結果完全一樣,分歧只出現在負數這一頭。報價表如果同時有正數金額和負數折讓,函數的選擇會直接影響折讓金額,用 -1,096.2 這類數字代入試算一次,就能看出各函數的方向。
進位到 50 元的倍數要換用倍數函數
很多報價想抹到 50 元,或是進位到 5 的倍數,位數引數做不到這件事,這時要換成倍數函數。MROUND、CEILING、FLOOR 三個函數都是把數字取整到某個倍數,各自的方向不同。
ROUND 的位數引數只能對準十、百、千位
ROUND 的位數只有 10 的次方可以選,個位、十位、百位、千位,中間沒有 25、50 這種倍數。報價想抹到 50 元,位數 -1 只能到十位,-2 又跳到百位,怎麼寫都對不到 50。
Microsoft 在 ROUND 的說明頁也提醒,要四捨五入到指定的倍數,例如最接近 0.5 的數字,請改用 MROUND函數。
MROUND 四捨五入到最近的倍數
語法是 MROUND(數字, 倍數)。=MROUND(E5,50) 把社群貼文模板的 2,932.5 變成 2,950,=MROUND(E4,50) 把海報設計的 3,901.5 變成 3,900,都是離它最近的 50 的倍數。再看一個單純的例子,=MROUND(10,3) 得 9,因為 9 是離 10 最近的 3 的倍數。
MROUND 有兩個限制。第一,數字與倍數的正負號必須相同,不同就傳回 #NUM! 錯誤,例如 =MROUND(5,-2)。
第二,倍數是小數時,剛好落在中間的值,進位方向不固定。Microsoft 記載的例子是 MROUND(6.05,0.1) 得 6.0,MROUND(7.05,0.1) 卻得 7.1。倍數用小數時要留意這個差異,報價常用的 50、100 屬於整數倍數,直接代入幾筆資料試算確認即可。
CEILING 固定往上,FLOOR 固定往下
CEILING 把數字進位到倍數,FLOOR 把數字捨去到倍數,兩個函數都需要數字與倍數兩個引數。接續前面的貼紙例子,=CEILING(130,25) 得 150,也就是 6 包的張數。報價表上,=CEILING(2932.5,50) 得 2,950,=FLOOR(3901.5,50) 得 3,900。
數字本身已經是倍數時,兩個函數都不會改動它。FLOOR 在數字為正、倍數為負時會傳回 #NUM!,例如 =FLOOR(2.5,-2)。
要控制負數的方向,可以改用 CEILING.MATH 與 FLOOR.MATH,這兩個函數多了第三個引數 mode,可以反轉負數的取整方向。不填 mode 時,=CEILING.MATH(-8.1,2) 會把負數往 0 的方向進位,得到 -8,=FLOOR.MATH(-8.1,2) 則得到 -10。多數報價表只處理正數金額,用不到這兩個,知道有這條路即可。
儲存格格式只改外觀,加總仍用完整小數
按下減少小數位數,畫面上的 1,096.5 變成 1,097,很多人就以為這已經是 Excel四捨五入。其實格式只是換了外觀,儲存格裡存的仍然是 1,096.5,後面所有公式用的也是這個完整的數字。
這個落差平常看不出來,一旦拿去加總,差 1 元的問題就會露出來。
小數位數按鈕與格式設定都不改動儲存值
調整顯示的小數位數有兩個入口,一個是「常用」索引標籤「數值」群組裡調整小數位數的按鈕,另一個是儲存格格式對話方塊裡的小數位數設定。這兩個入口都只改畫面上看到的樣子,公式計算仍然用完整的儲存值。
Microsoft 的說明有個很直接的例子。兩個儲存格各存 10.005,格式設成貨幣之後,每格都顯示 $10.01,但兩格相加得到的是 $20.01,不是 $20.02,因為 Excel 計算用的是 10.005。
所以格式管畫面,ROUND 才真的改掉儲存的數字。金額要拿給客戶看整數、後面還要拿去加總,就要用 ROUND,單靠格式只會讓畫面和計算結果對不起來。
只用格式取整時合計差 1 元的原因
把報價表的 E 欄只用格式顯示成整數,五列看到的是 1,097、1,479、3,902、2,933、4,012,用眼睛加起來是 13,423。
但 SUM 加的是儲存值,1,096.5 + 1,479 + 3,901.5 + 2,932.5 + 4,012 = 13,421.5,格式顯示成整數是 13,422。
這 1 元的落差不是 Excel 算錯。三個 .5 在各列都顯示成進位,五列的顯示值加起來比儲存值多出 1.5 元;合計的 13,421.5 只顯示成 13,422,只多出 0.5 元,所以眼睛加出來的 13,423 和合計差了 1 元。客戶拿到報價單逐列相加,就會發現合計對不起來。

逐列 ROUND 與加總後再 ROUND 的取捨
有兩種做法可以處理。第一種是逐列先 ROUND 再加總,F2 輸入 =ROUND(E2,0) 往下複製到 F6,合計再加總這五格,得到 13,423。各列加起來剛好等於合計,適合要給客戶逐列對帳的報價單。
第二種是加總後再 ROUND,合計得到 13,422,最貼近未取整的總額 13,421.5,但各列加起來是 13,423,跟合計差 1 元。兩種寫法如下:
=SUM(F2:F6)
=ROUND(SUM(E2:E6),0)Code language: Excel (excel)
這兩種做法沒有誰對誰錯,要看報價單想要各列加起來等於合計,還是想讓合計貼近原始總額。規則選定之後,整份報價單都照同一種做法,才不會同一份文件裡兩種算法並存。

平均分攤的尾差交給最後一列吸收
1,000 元的設計費平均分給 3 張海報,每張是 333.33……。逐列用 =ROUND(1000/3,0) 都得 333,三列加起來只有 999,少了 1 元。
常見的處理是前兩列照 ROUND,最後一列改成總額減掉前面各列。假設三張海報的金額放在 C2 到 C4,C4 就寫成:
=1000-SUM(C2:C3)Code language: Excel (excel)
C4 得 334,333 + 333 + 334 剛好是 1,000。
最後一列多負擔 1 元,換來合計正確。由哪一列吸收尾差可以自己決定,沒有固定的標準,事先定好、整份文件照同一套做法就行。
「以顯示值為準」會永久改寫儲存值
Excel 有個選項叫「以顯示值為準」,路徑是「檔案」→「選項」→「進階」,再到「計算此活頁簿時」區段勾選。開啟之後,儲存格裡的儲存值會直接被改成畫面上顯示的樣子,看起來能一次解決加總差 1 元的問題。
Microsoft 的說明指出,這個選項會永久改變儲存格中的儲存值,從完整精確度變成顯示的格式,之後即使切換回完整精確度,也還原不了原本的值。它影響的是整本活頁簿,不是單一欄位。
Excel 網頁版不支援這個設定,要改只能用桌面版 Excel 開啟。對報價表來說,只有要取整的欄位需要整理,用 ROUND 控制那幾欄就夠了,不需要為了湊出整數去開這個選項。
ROUND 結果不如預期的常見原因
ROUND 本身很單純,結果不如預期時,原因多半出在引數的內容、ROUND 放的位置,或是把顯示和數值混為一談。
儲存格內含文字時回傳 #VALUE!
number 或 num_digits 不是數字的時候,ROUND 會傳回 #VALUE! 錯誤。報價表常見的情境是單價欄混進了「待確認」三個字,E 欄的乘法先出錯,外面的 ROUND 也跟著出錯。
看到 #VALUE! 時,先檢查兩個引數所指的儲存格,數字和位數都要看,內容是不是文字,或是「約 1,200」這種帶說明的寫法。改法是把儲存格清成純數字,或是另外用公式取出數字。
先 ROUND 單價再乘數量會放大誤差
拿社群貼文模板這一列來看,折後單價是 690 × 0.85 = 586.5。如果先把單價 ROUND 成 587,再乘數量 5,就得到 2,935。乘完才 ROUND 的話,5 × 586.5 = 2,932.5,取整後是 2,933。兩種順序差 2 元:
=ROUND(690*0.85,0)*5
=ROUND(690*0.85*5,0)Code language: Excel (excel)
單價那 0.5 的進位被數量放大,乘以 5 就變成 2.5 的差距,所以 ROUND 放在算式的最後一步,比較不會偏離實際金額。例外是報價規則本來就以整數元報單價,這時先取整單價再乘數量,反而是合理的做法。
ROUND 不會補零,固定位數要靠儲存格格式
假設某格用 ROUND 取到小數第 2 位,結果恰好是 12.5,儲存格只會顯示 12.5,不會自動補成 12.50,因為 12.5 本來就等於 12.50。ROUND 管的是數值,不管顯示要幾位。
想固定顯示兩位小數,要再用前面提到的儲存格格式,把小數位數設成 2。順序是先用 ROUND 把數值整理好,再設格式讓畫面對齊,兩者可以並用,各管各的。
下次做報價表,先決定取整的規則,是要逐列對帳,還是讓合計貼近總額,再把規則寫成公式。規則定下來,Excel四捨五入的結果就不會因人而異,報價單上的合計也不會再出現說不清楚的 1 元。
