五個商品的含稅價,每格都設成「顯示 0 位小數」,我用眼睛加起來是 347,SUM 卻給我 349。
這篇整理 Google 試算表裡 15 個把數字「收一收」的函式,重點放在兩件事:負數時它們各往哪個方向走,還有什麼時候該用 ROUND 把值真的改掉,而不是只改顯示。
加總對不起來的時候
先看資料。未稅價乘 1.05 變含稅價,含稅價那一欄的格式調成 0 位小數,「畫面顯示」是同一欄的外觀,不是另一欄:
| 品項 | 未稅價 | 含稅價實際值 | 畫面顯示 | ROUND 後 |
|---|---|---|---|---|
| 蘋果紅茶茶葉 | 88 | 92.4 | 92 | 92 |
| 青茶茶葉 | 84 | 88.2 | 88 | 88 |
| 烏龍茶葉 | 43 | 45.15 | 45 | 45 |
| 茶杯 | 49 | 51.45 | 51 | 51 |
| 茶壺 | 68 | 71.4 | 71 | 71 |
| 合計 | 348.6 | 349 | 347 |
畫面上五格是 92、88、45、51、71,手算是 347。但 SUM 用的是底下真正的 348.6,顯示出來就是 349。差了 2 塊,對帳的時候最容易吵起來。
格式只改顯示,儲存格裡的值沒變。這件事在 儲存格的值與顯示格式 有完整講過,這邊只講結論:要讓值真的變成整數,得用函式。
如果要用 ROUND 寫,每格改成:
含稅價四捨五入到整數,D2 往下填
=ROUND(B2*1.05, 0)五格算完是 92、88、45、51、71,加總 就是 347,跟手算對得上。
負數的方向
正數的時候,這幾個函式大多給一樣的答案,差別在負數。我用 2.5 和 -2.5 各丟一次,位數或倍數都取 0 位、倍數 1:
| 函式 | 2.5 | -2.5 | 負數往哪走 |
|---|---|---|---|
ROUND(x, 0) | 3 | -3 | 離 0 遠的那邊 |
ROUNDUP(x, 0) | 3 | -3 | 離 0 遠 |
ROUNDDOWN(x, 0) | 2 | -2 | 靠近 0 |
TRUNC(x) | 2 | -2 | 靠近 0 |
INT(x) | 2 | -3 | 負無限大 |
FLOOR(x, 1) | 2 | -3 | 負無限大 |
CEILING(x, 1) | 3 | -2 | 正無限大 |
最容易搞混的是 INT 跟 TRUNC。都叫「取整數」,正數一模一樣,到了 -2.5 一個給 -3、一個給 -2。
我的記法:名字有 UP、DOWN 的(ROUNDUP、ROUNDDOWN)看的是離 0 遠或近,所以負數會跟著正數對稱。INT、FLOOR、CEILING 看的是數線上的左右,往小的那邊就是往負的那邊。
表中 FLOOR、CEILING 的方向,是倍數為正(這裡是 1)時的行為。數字是負的、倍數也給負的組合很少見,而且要小心:CEILING 的官方說明寫,數值為負時倍數可以正也可以負,由倍數的正負決定進位方向,所以負倍數不一定還是往正無限大;FLOOR 的官方說明頁對倍數正負的規則前後不一致。需要處理負數的話,用下面的 CEILING.MATH、FLOOR.MATH,它們可以用第三個參數指定負數要往哪邊走。
浮點誤差
二進位浮點數不能精確表示所有十進位小數;畫面顯示與後續比較也可能不同。不要把其他程式語言顯示的尾數直接當成 Sheets 會顯示的字串。
平常看不出來,一旦拿去比較就出事:
畫面可能顯示0,仍要分開核對比較結果
=0.1+0.2-0.3原式與 TO_TEXT(0.1+0.2-0.3) 都顯示 0,但 為 FALSE。因此條件式 會落到「不相等」;不能只靠畫面上的 0 判斷計算是否完全相等。
同一格改到「格式」>「數字」>「工程型」,會看到 5.55E-17;相較之下,在自動格式下,原式與 TO_TEXT 都顯示 0。改格式只是讓尾差可見,沒有把底層值變成 0。
這種比較前先 ROUND 一下就好:
比較前先收到 10 位小數
=ROUND(0.1+0.2-0.3, 10)結果是 0。位數我習慣抓比資料需要的多幾位,金額收 2 位的話,比較時收到 8 或 10 位都夠用。
函式參考
ROUND
四捨五入到指定的小數位數。
- 數值:要處理的數字。
- 位數:選填,預設 0。正數是小數點後幾位,負數是小數點前幾位。
用 1234.5678 看不同位數:
| 公式 | 結果 |
|---|---|
| 1234.57 | |
| 1235 | |
| 1230 | |
| 1200 |
剛好在中間的 2.5,ROUND 往離 0 遠的方向進,所以 2.5 變 3,-2.5 變 -3。文字丟進去會是 #VALUE!。
我寫報表時用最多的就是它,其次才是 ROUNDUP。
ROUNDUP
不管後面的數字是多少,只要有就往上進,往離 0 遠的方向。
53 個商品,一箱裝 12 個,要幾箱:
不足一箱也要整箱買
=ROUNDUP(53/12, 0)53 ÷ 12 = 4.4166⋯⋯,結果是 5。
位數一樣可以用負數: 是 1300。
ROUNDDOWN
跟 ROUNDUP 相反,一律捨去,往靠近 0 的方向。
消費 1250 元,每滿 100 元一點,可以拿到幾點:
不滿 100 的零頭不算
=ROUNDDOWN(1250/100, 0)結果是 12。 是 2.3, 是 1200。
INT
取小於或等於這個數字的最大整數。
是 8, 是 -9。正數的時候它跟 ROUNDDOWN(x, 0) 一樣,負數就分家了,前面的表格已經對照過。
它沒有位數參數,只能收到整數。
TRUNC
把小數位砍掉,不做任何進位。
- 位數:選填,預設 0。
是 8.9, 是 -8.9, 是 1200。
TRUNC 對任何正負數的行為都跟 ROUNDDOWN 一樣,差別只在名字。我想要「直接砍掉小數」的意思時會選 TRUNC,讀公式的人比較容易懂。
CEILING
進位到指定倍數的整數倍,倍數為正時往正無限大。
- 因數:選填,預設 1。數值為正時,因數必須是正數;數值為負時,因數可正可負,由它決定進位方向(官方說明)。
停車 75 分鐘,每 30 分鐘計一次費:
75 分鐘進位到 30 的倍數
=CEILING(75, 30)結果是 90,除以 30 就是 3 個計費單位。 是 300, 是 10。
FLOOR
跟 CEILING 相反,捨去到倍數的整數倍,倍數為正時往負無限大。
消費 1237 元,每滿 500 元送一份贈品:
1237 捨去到 500 的倍數
=FLOOR(1237, 500)結果是 1000,除以 500 是 2 份。
MROUND
四捨五入到最接近的倍數,不管往上或往下,看哪邊近。
兩個參數都要填。跟 CEILING 比比看,同樣是以 30 為倍數:
| 公式 | 結果 | 原因 |
|---|---|---|
| 60 | 70 離 60 近 | |
| 90 | 一律往上 | |
| 90 | 80 離 90 近 |
官方說明寫,數字跟因數的正負號必須相同,不同就會出錯。需要時兩個都用負數,或先 ABS 再補回負號。數字剛好落在兩個倍數正中間時,取絕對值較大的那個,例如 是 28。
CEILING.MATH
跟 CEILING 一樣往上進位到倍數,但負數的方向可以自己選。
- 倍數:選填,預設 1。
- 模式:選填,預設 0。數字是負數時,0 往正無限大進,非 0 則往離 0 遠的方向進。
| 公式 | 結果 |
|---|---|
| 10 | |
| -5 | |
| -10 |
FLOOR.MATH
CEILING.MATH 的反方向。
數字是負數時,模式 0 往負無限大捨,非 0 則往靠近 0 的方向捨。
| 公式 | 結果 |
|---|---|
| 5 | |
| -10 | |
| -5 |
CEILING.PRECISE
往正無限大進位到倍數的整數倍,而且不管倍數是正是負,都當作正的來算。
- 倍數:選填,預設 1。正負號會被忽略。
| 公式 | 結果 |
|---|---|
| 10 | |
| -5 | |
| 10 | |
| -5 |
四個結果的規則只有一條:一律往正無限大走,-7.2 的下一個 5 的倍數是 -5。數值為正卻給負倍數,CEILING 的官方說明並不允許,這個函式就不用擔心。負數的結果和 CEILING.MATH 預設模式一樣。
ISO.CEILING
名字帶 ISO,行為和 CEILING.PRECISE 相同,是為了相容規格而存在的名稱。
我自己沒有理由選它,要用這種語意就直接寫 CEILING.PRECISE,同事比較看得懂。
FLOOR.PRECISE
CEILING.PRECISE 的反方向:往負無限大捨去到倍數的整數倍,倍數的正負號同樣被忽略。
| 公式 | 結果 |
|---|---|
| 5 | |
| -10 | |
| 5 | |
| -10 |
-7.2 往負的方向,下一個 5 的倍數是 -10。結果和 FLOOR.MATH 預設模式一樣。
ODD
進位到最接近的奇數,離 0 遠的方向。
是 3, 是 3, 是 3。
坦白說我沒在工作裡用過,丟在這邊當作完整名單。
EVEN
進位到最接近的偶數,離 0 遠的方向。
是 2, 是 2, 是 4。
實際用到的場合是兩人一桌的排位:7 個人要湊成整桌, 是 8 個位子。
要挑哪一個,我的順序是:只是想收小數,先 ROUND;一定要進位或一定要捨去,換 ROUNDUP、ROUNDDOWN;要湊倍數才用 CEILING、FLOOR。算完的欄位如果要拿去加總或比較,記得用 ROUND 把值改掉,只調格式是擋不住差 2 塊的。接下來可以搭配 SUMIF 與 COUNTIF,先加總再收尾數。
接下來可以
這篇在技能樹的 Lv.2「進階分析」,模組「處理與分析數字」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「計算排名與百分位數」。
回到技能樹相關文章
查看所有文章儲存格的值與顯示格式:看起來一樣,其實不一樣
儲存格存的值和畫面上看到的樣子是兩件事。用圖看日期、百分比、小數位數、帶單位的數字,學會用 N、ISNUMBER 查出真相,也知道格式該設在哪裡。
SUMIF 與 COUNTIF 入門:用一個條件加總和計數
SUMIF、COUNTIF 的語法、條件怎麼寫(文字、比較符號、萬用字元與波浪號),把條件放在儲存格裡的 & 寫法,以及簡單提到的 AVERAGEIF。只談單一條件。
CONVERT 單位換算:公里、磅、攝氏、小時一次搞定
用 CONVERT 在公式裡換算長度、重量、溫度、時間和容量,附常用單位代碼表、整欄套用的寫法,以及單位類別不同時的錯誤。
留言討論
共 0 則留言
