TRUNC
GEHEEL in Dutch Excel
Cuts a number off after a chosen number of decimals, without rounding, so 7.98 becomes 7 and -7.98 becomes -7.
Last updated: 13 October 2026
| Row | A | B | C |
|---|---|---|---|
| 1 | Entry no. | Debit | Whole euros |
| 2 | 25-0731 | €12,480.75€ 12.480,75 | €12,480.00€ 12.480,00=TRUNC(B2)=TRUNC(B2) |
| 3 | 25-0732 | €5,000.00€ 5.000,00 | |
| 4 | 25-0733 | €9,875.40€ 9.875,40 | |
| 5 | 25-0734 | €20,000.00€ 20.000,00 | |
| 6 | 25-0735 | €749.95€ 749,95 |
Swipe sideways to see all columns
Result: €12,480.00€ 12.480,00
=TRUNC(B2)
=TRUNC(B2)
What TRUNC does and when to use it
What it does: it cuts digits off a number without rounding, for example 7.98 km on a mileage claim becomes 7 km. It always moves toward zero, and num_digits sets where the cut falls.
When to use it: when a rule says decimals are dropped rather than rounded, such as whole kilometres, amounts cut to cents under a contract or commission that may never round up. It does the same as ROUNDDOWN and differs from INT only for negative numbers.
How Excel evaluates it
Excel evaluates number completely, then reads num_digits, using 0 if it is left out. It keeps every digit up to that position and replaces everything after it with zeros, without adding anything to the last kept digit.
The sign is kept, so a negative number ends up closer to zero than it started. A number that already has no digits beyond the position comes back unchanged.
Watch out: TRUNC moves toward zero, not down: -7.98 becomes -7. Only INT goes down, to -8, and that is the one place where the two differ.
Mental model
Scissors on a printed number: you cut after the chosen digit and throw the rest away, whatever it said, and the minus sign stays on the piece you keep.
TRUNC(number,[num_digits])
TRUNC(number;[num_digits])
| Argument | Type | Meaning | Default |
|---|---|---|---|
number | Required | The value to cut off; a number, a cell or a calculation. | |
num_digits | Optional | Decimals to keep: leave out for whole numbers, 2 for cents, -2 for hundreds. | 0 |
Return value:number with the digits after num_digits removed, toward zero
Formulas use commas (,) between arguments, as in English Excel. Formulas use semicolons (;) between arguments, as in Dutch Excel. Formulas use commas (,) between arguments, as in English Excel; Dutch Excel uses semicolons (;).
Worked examples
Beginner
Whole euros of manual entries for a round-amount test
In journal entry testing you look at the manual MEM entries in the XAF auditfile export. Round amounts are a fraud indicator, but the debit column has cents. You want a helper column with the whole euros, so you can see which entries have no cents at all.
| Row | A | B | C | D |
|---|---|---|---|---|
| 1 | Entry no. | Debit | Whole euros | |
| 2 | 25-0731 | €12,480.75€ 12.480,75 | €12,480.00€ 12.480,00=TRUNC(B2)=TRUNC(B2) | |
| 3 | 25-0732 | €5,000.00€ 5.000,00 | ||
| 4 | 25-0733 | €9,875.40€ 9.875,40 | ||
| 5 | 25-0734 | €20,000.00€ 20.000,00 | ||
| 6 | 25-0735 | €749.95€ 749,95 | ||
| 7 |
Swipe sideways to see all columns
Formula in C2
=TRUNC(B2)
=TRUNC(B2)
Result: €12,480.00€ 12.480,00
Step by step
- Excel reads number from
B2: the debit of entry25-0731, 12480.75. num_digits is left out, so it is 0: only the whole euros survive. - It cuts after the units digit and drops .75 without looking at it. The result is 12480, even though 12481 is closer.
C2shows 12480.B2andC2differ, so this entry has cents and is not a round amount.- Copy down. 5000 stays 5000, 9875.40 becomes 9875, 20000 stays 20000 and 749.95 becomes 749.
- Entries
25-0732and25-0734have B equal to C: no cents, and round thousands. Those two go on your list for follow-up with the preparer. The whole euros total 12480 + 5000 + 9875 + 20000 + 749 = 48104.
Watch out: A whole-euro column is only a helper. An amount of 5000.45 and one of 5000.00 give the same whole euros, so always compare against the original column before you flag an entry as round.
More on this example: why it works, 1 variation
Why it works
Without num_digits, TRUNC keeps the integer part and nothing else. An amount without cents comes back unchanged, so comparing the original with the truncated value shows at once which entries have no cents.
Variations
=INT(B2)
=INT(B2)
Identical for debit amounts, which are never negative. The two only differ below zero, for instance on credit amounts you carry as negatives.
Intermediate
Convert dollar creditor invoices to euros, cut to cents
At year end the client revalues its open supplier invoices in dollars at the closing rate of 31 December 2025, and its system cuts the euro amount to whole cents, never rounded. You recalculate the creditors specification to see if the balance agrees.
The rate sits in E1 and the formula is copied down. One line is a credit note with a negative amount, and it is cut toward zero as well.
| Row | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 1 | Invoice no. | Amount USD | Amount EUR | Closing rate | 0.95620,9562 | |
| 2 | C2001-118 | 4,390.004.390,00 | €4,197.71€ 4.197,71=TRUNC(B2 * $E$1, 2)=TRUNC(B2 * $E$1; 2) | |||
| 3 | C2001-121 | -1,180.40-1.180,40 | ||||
| 4 | C2014-040 | 799.99799,99 | ||||
| 5 | C2014-052 | 12,310.4012.310,40 | ||||
| 6 |
Swipe sideways to see all columns
Formula in C2
=TRUNC(B2 * $E$1,2)
=TRUNC(B2 * $E$1;2)
Result: €4,197.71€ 4.197,71
Step by step
- Excel evaluates number first:
B2×$E$1= 4390 × 0.9562 = 4197.718 euros. - num_digits is 2, so the hundredths digit is the last one kept. The 8 after it is dropped: 4197.71. Rounding would have given 4197.72.
- Without num_digits, TRUNC would cut to whole euros and return 4197, losing 71 cents. The optional argument is what moves the cut from euros to cents.
- Copy down. The credit note: -1180.4 × 0.9562 = -1128.69848. TRUNC cuts toward zero: -1128.69, not -1128.70. This matches how the client's system treats credit notes.
C2014-040: 799.99 × 0.9562 = 764.950438, cut to 764.95.C2014-052: 12310.4 × 0.9562 = 11771.20448, cut to 11771.20.
Watch out: Without the $ signs, row 3 multiplies by E2, which is empty, and returns 0 without an error: a credit note that silently disappears from your recalculation.
More on this example: why it works, 1 more pitfall, 1 variation
Why it works
num_digits sets the cut at cents, and TRUNC moves toward zero on both sides, so an invoice and a credit note of the same size convert to the same amount with opposite signs. The rate in a locked cell keeps every row on the same closing rate, which is what you test.
More to watch out for
- ROUNDDOWN(B2 * $E$1, 2) gives the same results; INT(B2 * $E$1 * 100) / 100 does not, because for the credit note it goes down to -1128.70.
Variations
=ROUND(B2 * $E$1,2)
=ROUND(B2 * $E$1;2)
Normal rounding to cents, for comparison: it gives 4197.72 and -1128.70, and differs from the cut only when the third decimal is 5 or more. If the client rounds, this is your recalculation.
Advanced
Show a reconciliation difference as euros and cents
You reconcile general ledger balances to the client's specifications (debtors list, creditors list, VAT return). For the working paper you want the difference per account as readable text: -649.75 should read -649 euro 75 cent, and a difference of -0.25 must keep its minus sign. The formula builds it in three parts:
- IF adds the minus sign
- TRUNC takes the whole euros of the absolute difference
- the rest is turned into cents
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Account | Ledger | Specification | Difference shown | |
| 2 | 13001300 | €184,250.40€ 184.250,40 | €184,900.15€ 184.900,15 | -649 euro 75 cent=IF(B2 - C2 < 0, "-", "") & TRUNC(ABS(B2 - C2)) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100, 0) & " cent"=IF(B2 - C2 < 0; "-"; "") & TRUNC(ABS(B2 - C2)) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100; 0) & " cent" | |
| 3 | 16001600 | €96,310.00€ 96.310,00 | €95,880.20€ 95.880,20 | ||
| 4 | 11001100 | €85,420.50€ 85.420,50 | €85,420.50€ 85.420,50 | ||
| 5 | 18001800 | €18,420.35€ 18.420,35 | €18,420.60€ 18.420,60 | ||
| 6 |
Swipe sideways to see all columns
Formula in D2
=IF(B2 - C2 < 0,"-", "") & TRUNC(ABS(B2 - C2)) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100, 0) & " cent"
=IF(B2 - C2 < 0;"-"; "") & TRUNC(ABS(B2 - C2)) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100; 0) & " cent"
Result: -649 euro 75 cent
Step by step
- Excel evaluates the difference first: B2 - C2 = 184250.40 - 184900.15 = -649.75. It is below zero, so IF(B2 - C2 < 0, "-", "") gives the text -. The sign is now carried by text, not by the number.
- ABS(B2 - C2) is 649.75, and TRUNC(649.75) cuts the decimals off and gives 649, the whole euros of the absolute difference.
- Inside the cents part, B2 - C2 - TRUNC(B2 - C2) = -649.75 - (-649) = -0.75 of a euro. ABS removes the sign, because the minus is already shown in front: 0.75.
- 0.75 × 100 = 75 cents, and ROUND(75, 0) is 75. The ROUND absorbs the binary noise that subtracting amounts with cents leaves behind, such as 74.99999999999 instead of 75.
- The & joins the pieces: the text -, 649, the text ' euro ', 75 and ' cent'.
D2shows-649 euro 75 cent: the ledger is 649.75 below the debtors list. Copy down:
- account 1600 gives 96310.00 - 95880.20 = 429.80: no minus sign, 429 euro 80 cent
- account 1100 agrees: 0 euro 0 cent
- account 1800 gives 18420.35 - 18420.60 = -0.25: the IF adds the minus sign, TRUNC(0.25) is 0 and the cents are 25, so -0 euro 25 cent
The shortfall stays visible.
Watch out: The shorter formula =TRUNC(B2 - C2) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100, 0) & " cent" works for -649.75 but fails for account 1800: the difference is -0.25, TRUNC(-0.25) is 0, and zero has no minus sign, so it shows 0 euro 25 cent and a shortfall reads as an excess.
More on this example: why it works, 1 more pitfall, 1 variation
Why it works
The sign and the size are handled separately. IF writes the minus sign as text, so it survives even when the whole euros are 0. TRUNC and ABS then give the euros and cents of the absolute difference, so both read in the same direction, and ROUND absorbs the binary noise of decimal amounts.
More to watch out for
- The result is text. Keep the numeric difference in its own column for totals and for your comparison against materiality; this column is for reading only.
Variations
=TRUNC(B2 - C2) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100,0) & " cent"
=TRUNC(B2 - C2) & " euro " & ROUND(ABS(B2 - C2 - TRUNC(B2 - C2)) * 100;0) & " cent"
The shorter version without the IF. It gives -649 euro 75 cent for account 1300 but 0 euro 25 cent for account 1800 (-0.25), so do not use it when differences below one euro occur.
MasterExcel 2021 or later (This example needs Excel 2021 or later)
Recalculate VAT cut to cents, safe from floating-point noise
You recalculate the VAT on sales invoices from the XAF export (21% and 9%). The client's system cuts VAT per line to whole cents, and credit notes are cut toward zero too.
Some products of net amount and rate are stored a hair below the cent they display, and a bare TRUNC would take a cent off those. The formula uses LET to clean the product before cutting it.
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Entry no. | Net amount | VAT rate | Recalculated VAT | |
| 2 | 25-0412 | €1,260.00€ 1.260,00 | 21%21% | €264.60€ 264,60=LET( net, B2, rate, C2, raw, net * rate, clean, ROUND(raw, 6), TRUNC(clean, 2) )=LET( net; B2; rate; C2; raw; net * rate; clean; ROUND(raw; 6); TRUNC(clean; 2) ) | |
| 3 | 25-0413 | €1,250.50€ 1.250,50 | 21%21% | ||
| 4 | 25-0414 | -€480.30€ -480,30 | 21%21% | ||
| 5 | 25-0415 | €1,280.00€ 1.280,00 | 9%9% | ||
| 6 |
Swipe sideways to see all columns
Formula in D2
=LET( net,B2, rate, C2, raw, net * rate, clean, ROUND(raw, 6), TRUNC(clean, 2) )
=LET( net;B2; rate; C2; raw; net * rate; clean; ROUND(raw; 6); TRUNC(clean; 2) )
Result: €264.60€ 264,60
Step by step
- LET names the inputs: net is 1260 and rate is 0.21 (21%). raw is 1260 × 0.21, which is 264.6 on paper.
- In binary, 0.21 cannot be stored exactly, and the product can come out as 264.59999999999997. Excel displays 264.60, but TRUNC(raw, 2) would cut after the 9 and return 264.59.
- clean is ROUND(raw, 6) = 264.6: rounding to 6 decimals removes the noise in the 15th digit without touching any real cent or tenth of a cent.
- TRUNC(clean, 2) keeps two decimals of 264.6: 264.60. The recalculated VAT of entry
25-0412is 264.60. - Entry
25-0413: 1250.50 × 0.21 = 262.605, a real third decimal. clean stays 262.605 and TRUNC cuts it to 262.60, as the client's system does; ROUND would give 262.61 and a false difference of one cent. - Credit note
25-0414: -480.30 × 0.21 = -100.863, cut toward zero to -100.86. Entry25-0415: 1280 × 0.09 = 115.2, so 115.20.
Watch out: The mirror-image mistake is INT(raw * 100) / 100. For positive values it matches TRUNC, and both share the same floating-point risk, so it passes a test on sales, but on credit note 25-0414 it goes down to -100.87 and shows a false difference of one cent.
More on this example: why it works, 1 more pitfall, 2 variations
Why it works
Truncation is a cliff: a value one billionth below a cent falls to the cent below. Rounding to 6 decimals first moves values that are meant to be exact back onto the cent, while real fractions of a cent (the 0.005 in 262.605) survive and are cut as the system does. LET keeps the raw, cleaned and final values apart so each step can be checked.
Do not use this construction when the client rounds VAT per line: then ROUND(raw, 2) is the alternative, shorter and without the noise problem, and it is the recalculation that will agree with that system.
More to watch out for
- Rounding to too few decimals in clean, such as ROUND(raw, 2), rounds 262.605 to 262.61 before TRUNC sees it, and the cut does nothing. Keep the cleaning precision well beyond the cut.
Variations
=TRUNC(ROUND(B2 * C2,6), 2)
=TRUNC(ROUND(B2 * C2;6); 2)
The same calculation without LET, for Excel 2019 and earlier.
=TRUNC(B2,-2)
=TRUNC(B2;-2)
A negative num_digits cuts to hundreds: the 1260 of entry 25-0412 becomes 1200, useful to group invoices in bands of 100 before you draw a sample.
Common mistakes
| Symptom | Cause | Fix |
|---|---|---|
| -3 instead of the expected -4 | TRUNC(-3.7) returns -3, and you expected -4. | INT(-3.7) is the function that gives -4, the next lower whole number. |
| Cut to cents, the total no longer matches | TRUNC(2.996, 2) gives 2.99, and the invoice line that showed 3.00 now disagrees with the total. | Formatting rounded the display, TRUNC cut the value. Use ROUND when amounts should match what a reader sees; keep TRUNC for rules that demand a cut. |
| 56.69 instead of 56.70 | A product such as 1260 × 4.5% shows 56.70, but TRUNC(..., 2) can return 56.69. | The product can be stored as 56.699999999999996, and a cut has no tolerance. Round to a few more decimals first: TRUNC(ROUND(x, 6), 2). The Master example shows this. |