Skip to content
Start free

How many decimal places should a percentage have?

Decide how many decimal places a number deserves from how many cases are behind it, and round at the end, not along the way.

Free course. Your Maestro, an AI, .

Ana, from marketing at Tiendas La Ceiba, sends in her quarterly report. Two lines stand out:

Repeat purchases at Ojo de Agua rose from 63.333% to 64.516%.

42.50% of surveyed customers would recommend the store.

They look rigorous: three decimal places sound like careful measurement. But Ojo de Agua has 310 cardholder customers, and the survey went to 40 people. (Ana, the survey and the chain are invented for the course.) Before you go on, do a quick calculation.

Check yourself: In the survey, 17 out of 40 customers said they would recommend the store: 42.50%. If one more customer had said yes, how much would the percentage change?

Every decimal place is a promise

When you write 42.50%, you're telling the reader you could tell 42.50% from 42.51%. With 40 people that's impossible: the percentage can only be 40.0%, 42.5%, 45.0% and so on, in jumps of 2.5 points. Extra decimal places add no information; they add a certainty the data doesn't have. That's called false precision.

A rule that works almost every time: one case moves the percentage by 100 ÷ n points, where n is the number of cases in the denominator. Don't show decimal places finer than that.

  • With 40 respondents, one case moves 2.5 points. Report "17 of 40" or "about 4 in 10"; if you need a percentage, 43% with no decimals.
  • With Ojo de Agua's 310 customers, one case moves 0.32 points. A whole-number percentage says everything the data knows.
  • With Centro's 10,400 customers, one case moves 0.01 points. There, one decimal place is justified.

Rounding has one more trap, and it shows up every time you report the parts of a total.

The parts of a total, each rounded to a whole number, as in a report table or a pie chart.

The parts of a total, each rounded to a whole number, as in a report table or a pie chart.

Three equal parts

Example 1 of 2

tres_partes.py
ventas = [1, 1, 1]
total = sum(ventas)
partes = [round(v / total * 100) for v in ventas]
print(partes)
print(sum(partes))

A guess is fine: it's kept as you wrote it, so you can compare. Only you and your Maestro see your predictions.

Example 2 of 2, opens once you explain this one

Make your prediction

Not adding up to 100 isn't an error

If your rounded percentages add up to 99 or 101, don't fix them by nudging one up or down by hand: that really would be changing the data. The honest thing is to leave them as they are and add a note: percentages may not add up to 100 because of rounding. Anyone reading a report with that note gets it right away.

What does cause problems is rounding before you do the math. Go back to Ceiba Express, from the percentage points page: its repeat purchase rate went from 25.0% to 28.846...%. If you first round to 28.8% and then calculate the change, you get 15.2%. With the full numbers it's 15.4%. Two tenths won't change any decision, but in a chain of calculations (the change in an average of a rate) the error builds up step by step.

Ask your Maestro why rounding at the start can move the final result.

Try it

Calculate each store's 2025 repeat purchase rate and, next to it, how many points a single customer would move it. The table goes from the store with the fewest customers to the one with the most.

Round recompra to one decimal place and add the column unclientemueve: how many points the repeat purchase rate changes with a single customer, 100.0 / clientes2025, rounded to two decimal places. You're done when the first row is Ojo de Agua with 64.5 and 0.32.

Your turn

Round recompra to one decimal place and add the column un_cliente_mueve: how many points the repeat purchase rate changes with a single customer, 100.0 / clientes_2025, rounded to two decimal places. You're done when the first row is Ojo de Agua with 64.5 and 0.32.

Tables: sucursales (sucursal, municipio, ventas_2024, ventas_2025, clientes_2024, recompraron_2024, clientes_2025, recompraron_2025)

sucursales · 24 rows

ColumnType
sucursal Nombre de la sucursal.VARCHAR
municipio Municipio (ficticio) donde está.VARCHAR
ventas_2024 Ventas del año 2024, en pesos.BIGINT
ventas_2025 Ventas del año 2025, en pesos.BIGINT
clientes_2024 Clientes con tarjeta que compraron en 2024.BIGINT
recompraron_2024 De esos clientes, cuántos volvieron a comprar en menos de 90 días (2024).BIGINT
clientes_2025 Clientes con tarjeta que compraron en 2025.BIGINT
recompraron_2025 De esos clientes, cuántos volvieron a comprar en menos de 90 días (2025).BIGINT

First rows

sucursalmunicipioventas_2024ventas_2025clientes_2024recompraron_2024clientes_2025recompraron_2025
CentroCiudad Ceiba412000004380000098002840104003120
ChapultepecCiudad Ceiba27900000261000007100220069002140
Plaza NorteCiudad Ceiba940000010100000260096027501070

Every run starts from fresh copies of the course's tables, so try anything.

Ready to run your query.

Run it yourself

Read the table from top to bottom. At Ojo de Agua, Cerro Prieto and El Encino, a single customer moves the repeat purchase rate by about a third of a point: writing 64.516% there promises thousandths of a number that moves in thirds. At Centro, with 10,400 customers, one customer moves it by a hundredth, and the decimal place is well earned.

With that, Ana's report can be rewritten:

Repeat purchases at Ojo de Agua barely changed: 190 of 300 customers in 2024 and 200 of 310 in 2025, about 6 in 10 both years.

17 of the 40 surveyed customers, about 4 in 10, would recommend the store.

It looks less impressive and says more. At Ojo de Agua, the difference between the two years is three or four customers.

False precision isn't only about percentages. A sales projection of "$43,812,547.23" for next year promises cents of something nobody knows to the nearest million. An average tenure of "8.4372 years" on a team of nine promises ten-thousandths of a year. In both cases, the number you show should reflect how much the person who calculated it actually knows.

Tip: Round at the end

Do all the math with the full numbers and round only what you're going to show. In a spreadsheet, change how many decimal places are displayed, not the stored value. In Python or SQL, round in the last step, not the first.

Paste a number from one of your reports and ask your Maestro how many decimal places it deserves.

One last question, with a rate like the ones in module 2.

Check yourself: A municipality of "approximately 250,000 inhabitants" had 611 thefts from businesses in a year. What's the best way to report its rate?