Trailing thousands separators in the format code will (at least for the locales I have used) reduce the rendered value by a factor of 1000. You can team the trailing separators to display millions, billions, etc.
If you still want the zeroes displayed, they can be added as a literal to the format, after the rendered number.
Also, thhe format code optionally supports up to 3 number formats for different intervals. By default they are used for positive values, negative values, and zero, respectively. The ranges can be adjusted with a condition in square brackets.
Using comma as thousands separator, you could then use this:
[>=500]# ##0,",000";[<=-500]-# ##0,",000";0,
Will display “0” for all values rounded to zero
…or…
# ##0,",000";-# ##0,",000";0
Displays “rounded to zero” as “,000”, only exactly zero values as “0”