Today I prepared a table of the many rounding functions available in DAX (yes, it’s part of the book we’re writing), so that I have a complete schema of the better function to use, depending on the round operation I need to do. Here is the list of functions used and then the results shown for a relevant set of values.

FLOOR = FLOOR( Tests[Value], 0.01 )

TRUNC = TRUNC( Tests[Value], 2 )

ROUNDDOWN = ROUNDDOWN( Tests[Value], 2 )

MROUND = MROUND( Tests[Value], 0.01 )

ROUND = ROUND( Tests[Value], 2 )

CEILING = CEILING( Tests[Value], 0.01 )

ROUNDUP = ROUNDUP( Tests[Value], 2 )

INT = INT( Tests[Value] )

FLOOR, TRUNC and ROUNDDOWN are very similar, except on the way you can specify the number of digits to round on. On the opposite, also CEILING and ROUNDUP are very similar in their results. You can see a few differences in the way the rounding is done (see row B, where 1.265 number is rounded in two different ways on the second decimal digit) between MROUND and ROUND function.

Finally, it is important to note that FLOOR and MROUND functions don’t operate on negative numbers, while other functions do.

FLOOR

Rounds a number down, toward zero, to the nearest multiple of significance.

`FLOOR ( <Number>, <Significance> )`

TRUNC

Truncates a number to an integer by removing the decimal, or fractional, part of the number.

`TRUNC ( <Number> [, <NumberOfDigits>] )`

ROUNDDOWN

Rounds a number down, toward zero.

`ROUNDDOWN ( <Number>, <NumberOfDigits> )`

MROUND

Returns a number rounded to the desired multiple.

`MROUND ( <Number>, <Multiple> )`

ROUND

Rounds a number to a specified number of digits.

`ROUND ( <Number>, <NumberOfDigits> )`

CEILING

Rounds a number up, to the nearest integer or to the nearest unit of significance.

`CEILING ( <Number>, <Significance> )`

ROUNDUP

Rounds a number up, away from zero.

`ROUNDUP ( <Number>, <NumberOfDigits> )`

INT

Rounds a number down to the nearest integer.

`INT ( <Number> )`