Floor rounds down, ceiling rounds up, and truncation cuts towards zero. For positive numbers floor and truncation agree, so most people never separate them. For negative numbers they do not: ⌊−2.5⌋ is −3 and truncating −2.5 gives −2.
Three operations, not one
Floor goes down, always. Towards −∞, whatever the sign.
Ceiling goes up, always. Towards +∞.
Truncation goes towards zero, which means down for positives and up for negatives. It is what happens when you cut the decimal part off and keep the digits.
Rounding to nearest is a fourth thing again, and the only one of the four that needs a tie-breaking rule — which is why 2.5 is a question and 2.4 is not.
Where they disagree
Take −2.5. Flooring goes down to −3. Truncating cuts the .5 off and leaves −2, which is upward.
For every positive number they agree, so the difference is invisible in testing until a negative arrives. That is what makes it a bug rather than a mistake: the code works, then one day a value goes below zero.
The magnitude of the gap is not the issue — both answers are within one. The issue is the direction, and the fact that a total built out of many such steps drifts consistently one way.
Worth remembering: ⌊−0.0001⌋ is −1. A value a hair below zero floors a whole unit down, which surprises people the first time.
The identity that links them
⌈x⌉ = −⌊−x⌋. Ceiling is floor viewed in a mirror.
It is worth knowing because it means you only ever need one of the two. A language that gives you a floor gives you a ceiling for free, and a rounding routine written once handles both directions.
It also explains the asymmetry cleanly. Flooring and truncating agree on positives because truncation IS flooring there; they disagree on negatives because truncation becomes the ceiling instead. Truncation is not a third direction — it is floor and ceiling stitched together at zero.
Integer division inherits the split
Divide −7 by 2 in whole numbers and there are two defensible answers.
Floored: −4 remainder 1. The remainder is non-negative, and it takes the sign of the divisor.
Truncated: −3 remainder −1. The remainder takes the sign of the dividend.
Both satisfy dividend = quotient × divisor + remainder, so neither is wrong. Python floors; C, Java and JavaScript truncate. A routine ported between them changes its answer on exactly this input, and the symptom is usually an array index going negative.
If you only ever want a non-negative remainder — which is what a clock, a hash bucket or a ring buffer wants — the floored convention is the one that gives it without a correction step.
Where it gets used
Counting containers. Twelve items into boxes of five needs ⌈12/5⌉ = 3 boxes. Flooring would say two, and two boxes do not hold twelve items.
Paging. Which page item 12 falls on, with ten per page, is a flooring question. How many pages there are in total is a ceiling one. Getting them the wrong way round is the classic off-by-one.
Time and dates. Turning seconds into whole minutes floors; working out how many minutes a task will occupy ceilings.
Graphics and layout. Snapping a coordinate to a pixel grid floors, and a half-pixel offset is why a hairline border sometimes disappears.
Sources and methodology
The notation and the conventions are standard; these are the references.
Method. Floor and ceiling are computed on exact rationals parsed from the digits you type, not on a double, so the answer never depends on whether a decimal happens to be representable in binary. That matters more than it sounds: flooring a value that is a hair below an integer in floating point returns the integer below it, and 0.1 + 0.2 is famously such a value. Integer division is computed on BigInt in both conventions at once, and both are checked to reconstruct the dividend. That engine is verified on every change against 140 hand-written assertions, including that floor ≤ x ≤ ceiling with a gap of exactly one for every non-integer, checked across three thousand generated values, and that the identity ceil(x) = −floor(−x) holds on two thousand more. The count and the per-case breakdown are published on the formula verification page.
Read the guide
For the three remainder conventions in full — floored, truncated and Euclidean — the Modulo Calculator covers the same split from the other direction.