Somali Shilling (SOS): 2 decimal places
- ISO 4217 exponent
- 2
- Minor units per unit
- 100
- Intl display digits
- 0
- Symbol (en-US)
- SOS
Intl gets this one wrong for storage
Intl.NumberFormat resolves SOS to 0 fraction digits — CLDR’s display precision. The ISO 4217 exponent banks and processors store SOS at is 2. Read the integer 123456 at Intl’s digits and it shows as 123,456; at the storage exponent it is 1,234.56. The library corrects this in one table, so every component formats SOS at 2 decimal places.
SOS in a statement
The same integer in every state a statement can be in. Null is not zero: unknown renders as a dash, never as a zero amount.
| Value | Stored (minor units) | Statement | Money component |
|---|---|---|---|
| Positive | 123456 | 1,234.56 | 1,234 Somali Shilling and 56 minor units |
| Negative | -123456 | (1,234.56) | negative 1,234 Somali Shilling and 56 minor units |
| Zero | 0 | 0.00 | 0 Somali Shilling |
| Unknown (null) | null | — | not available |
Typing SOS
What a person types, and the integer it is stored as at SOS's exponent. Rounded once, at the end.
| Typed | Stored as |
|---|---|
| 1,234.56 | 123456 |
| (1,234.56) | -123456 |
| 1.2k | 120000 |
| =1200+340*2 | 188000 |
Split without losing a minor unit
100.00 SOS split three ways. Rounding each third leaves a remainder; largest-remainder allocation hands it out one minor unit at a time, so the parts always sum to the whole.
- 33.34
- 33.33
- 33.33
- = 100.00
On a check
One thousand two hundred thirty-four SOS and 56/100 only
The fraction is over 100 because SOS has 2 decimal places. Write any amount in words.
SOS in React
The component reads the exponent from the currency code; you pass the integer and the code, never a float and never a decimal count.
import { Money } from "@/components/ledger/money";
// 1,234.56 SOS, stored as the integer 123456
<Money accounting value={{ amount: 123456, currency: "SOS" }} />Also stored at 2 decimal places
Work with it
Tools that read SOS at its own exponent.