micro-dollar: a way to deals with decimal numbers or monetary values
The easiest way to deal with decimal number in our application is "multiply by 1,000,000". such that using 6-digit decimal you won't make a mistake.
- USD$1.23 = 1230000 micro USD
- USD$0.01 = 10000 micro USD
I termed it the "micro-dollar," and we use this approach in almost our services, messaging, contracts as a standard for all monetary values.
The benefits of this micro-dollar strategy are numerous. The advantages of this were stated in one of Stackoverflow's answers.
- Simple to use and compatible with every language.
- Enough precision to handle fractions of a cent.
- Works for very small per-unit pricing (like ad impressions or API charges).
- Easy to maintain accuracy through calculations and apply rounding at the final output.
Google are using this approach too (see in the Google Standard Payment doc)
Monetary values in this API are represented using a format called "micros", a standard at Google. Micros are an integer based, fixed precision format. To represent a monetary value in micros, multiply the standard currency value by 1,000,000.
🔗How should it be implemented?
The two main things we do are.
- In the application or service level, Use
microdollaras a default, set an agreement between services and use it end-to-end. You may store these monetary values as
- In User interfaces only, we do convert from the micro-dollar to the decimal dollar format. Only user need to see the actual value.
Yes! In UI, we may easily create a
utils/microdollar.js that contains 2 functions.
export const toMicrodollar = (dollar) => dollar * 1_000_000; export const fromMicrodollar = (microdollar) => microdollar / 1_000_000;
You can add
Math.ceil() as a safety net too.
According to mozilla.org reference,
When you calculate this in as well, the outcome shouldn't total more than $9 billions.
bigint are probably much more than that in other languages. Particularly, Golang's "big" package has an almost limitless 😂