Available in:All versions (Works in Excel 2007, every later version, Microsoft 365 and Excel for the web)Examples need Excel 2021 or laterCategory:Math

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.

Difficulty rating 1 of 5. It cuts digits off without rounding, and the only surprise is on negative numbers, where it moves toward zero and so differs from INT.

Last updated: 13 October 2026

See the worked examples

Sheet excerpt: C2 holds the formula
RowABC
1Entry no.DebitWhole euros
225-0731€12,480.75€ 12.480,75€12,480.00€ 12.480,00=TRUNC(B2)=TRUNC(B2)
325-0732€5,000.00€ 5.000,00
425-0733€9,875.40€ 9.875,40
525-0734€20,000.00€ 20.000,00
625-0735€749.95€ 749,95
Formula cell (C2)Input

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])
Arguments
ArgumentTypeMeaningDefault
numberRequiredThe value to cut off; a number, a cell or a calculation.
num_digitsOptionalDecimals 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.

Sheet excerpt: C2 holds the formula
RowABCD
1Entry no.DebitWhole euros
225-0731€12,480.75€ 12.480,75€12,480.00€ 12.480,00=TRUNC(B2)=TRUNC(B2)
325-0732€5,000.00€ 5.000,00
425-0733€9,875.40€ 9.875,40
525-0734€20,000.00€ 20.000,00
625-0735€749.95€ 749,95
7
Formula cell (C2)Input

Formula in C2

=TRUNC(B2)
=TRUNC(B2)

Result: €12,480.00€ 12.480,00

Step by step
  1. Excel reads number from B2: the debit of entry 25-0731, 12480.75. num_digits is left out, so it is 0: only the whole euros survive.
  2. It cuts after the units digit and drops .75 without looking at it. The result is 12480, even though 12481 is closer.
  3. C2 shows 12480. B2 and C2 differ, so this entry has cents and is not a round amount.
  4. Copy down. 5000 stays 5000, 9875.40 becomes 9875, 20000 stays 20000 and 749.95 becomes 749.
  5. Entries 25-0732 and 25-0734 have 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.

Sheet excerpt: C2 holds the formula
RowABCDEF
1Invoice no.Amount USDAmount EURClosing rate0.95620,9562
2C2001-1184,390.004.390,00€4,197.71€ 4.197,71=TRUNC(B2 * $E$1, 2)=TRUNC(B2 * $E$1; 2)
3C2001-121-1,180.40-1.180,40
4C2014-040799.99799,99
5C2014-05212,310.4012.310,40
6
Formula cell (C2)Input

Formula in C2

=TRUNC(B2 * $E$1, 2)
=TRUNC(B2 * $E$1; 2)

Result: €4,197.71€ 4.197,71

Step by step
  1. Excel evaluates number first: B2 × $E$1 = 4390 × 0.9562 = 4197.718 euros.
  2. 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.
  3. 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.
  4. 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.
  5. 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
Sheet excerpt: D2 holds the formula
RowABCDE
1AccountLedgerSpecificationDifference shown
213001300€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"
316001600€96,310.00€ 96.310,00€95,880.20€ 95.880,20
411001100€85,420.50€ 85.420,50€85,420.50€ 85.420,50
518001800€18,420.35€ 18.420,35€18,420.60€ 18.420,60
6
Formula cell (D2)Input

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
  1. 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.
  2. ABS(B2 - C2) is 649.75, and TRUNC(649.75) cuts the decimals off and gives 649, the whole euros of the absolute difference.
  3. 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.
  4. 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.
  5. The & joins the pieces: the text -, 649, the text ' euro ', 75 and ' cent'. D2 shows -649 euro 75 cent: the ledger is 649.75 below the debtors list.
  6. 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.

Sheet excerpt: D2 holds the formula
RowABCDE
1Entry no.Net amountVAT rateRecalculated VAT
225-0412€1,260.00€ 1.260,0021%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) )
325-0413€1,250.50€ 1.250,5021%21%
425-0414-€480.30€ -480,3021%21%
525-0415€1,280.00€ 1.280,009%9%
6
Formula cell (D2)Input

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
  1. LET names the inputs: net is 1260 and rate is 0.21 (21%). raw is 1260 × 0.21, which is 264.6 on paper.
  2. 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.
  3. 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.
  4. TRUNC(clean, 2) keeps two decimals of 264.6: 264.60. The recalculated VAT of entry 25-0412 is 264.60.
  5. 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.
  6. Credit note 25-0414: -480.30 × 0.21 = -100.863, cut toward zero to -100.86. Entry 25-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

Common mistakes
SymptomCauseFix
-3 instead of the expected -4TRUNC(-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 matchesTRUNC(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.70A 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.