CNY — Chinese Yuan Renminbi
fiatDeveloper Note
Symbol ¥ shared with JPY. Compact uses 万 (wàn = 10k) and 亿 (yì = 100M).
Verified 2026-09-27. Primary source
How to implement CNY safely
Yuan Renminbi uses ISO 4217 alpha code CNY and numeric code 156.
CNY appears in the current ISO 4217 list published 2026-09-17. CNY has ISO minor unit 2, so one major unit divides into 100 minor units. Configure Intl.NumberFormat with currency: "CNY"; do not hardcode the symbol or assume every currency uses two decimals.
¥ is the reference symbol in this dataset. Store CNY alongside the amount so exports, payments, and accounting data remain unambiguous. Format for display only after choosing the user's locale, because symbol placement and separators belong to the locale rather than the currency record.
This site's coverage associates CNY with one country or territory: China (CN). Region and language still need separate locale selection; the currency code alone does not choose punctuation or digit shapes. The record was checked against the SIX ISO 4217 source on 2026-09-27; recheck status-sensitive records when the Maintenance Agency publishes a new list.
- Status: active
- Numeric code: 156
- ISO minor unit: 2
- Verified: 2026-09-27
Reviewed 19 July 2026. Sources: SIX ISO 4217 current list
Common mistakes with CNY
- ¥ is also a symbol of JPY in this directory. Always pair it with the code CNY or a disambiguated symbol.
- In zh-CN the symbol goes immediately before the amount (¥1,234,567.89). Let the locale place it rather than concatenating strings.
How to format CNY
Pass currency: 'CNY' to Intl.NumberFormat and let the locale choose the symbol: en-US prints CN¥1,234.56, zh-CN prints ¥1,234.56. If the same screen can also show Japanese yen, display the ISO code instead of any symbol.
Telling CNY and JPY apart when both use ¥
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'CNY' }).format(1234);
// → "CN¥1,234.00"
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'JPY' }).format(1234);
// → "¥1,234"
new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'JPY' }).format(1234);
// → "JP¥1,234"
// Unambiguous anywhere: show the ISO code
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'CNY', currencyDisplay: 'code' }).format(1234.56);
// → "CNY 1,234.56"
// narrowSymbol drops the disambiguation — avoid it in mixed-currency UIs
new Intl.NumberFormat('en-US', { style: 'currency', currency: 'CNY', currencyDisplay: 'narrowSymbol' }).format(1234.56);
// → "¥1,234.56"- Each locale marks the currency that isn't its own: en-US marks the yuan (
CN¥), zh-CN marks the yen (JP¥). - Use
currencyDisplay: 'code'in tables, invoices and anywhere CNY and JPY can appear together. - Don't use
narrowSymbolfor CNY in an en-US interface. It renders the same¥as the yen.
Compact notation: 万 and 亿
zh-CN compact notation groups by ten thousand (万) and one hundred million (亿), not by thousand and million.
const zh = new Intl.NumberFormat('zh-CN', { notation: 'compact' });
zh.format(9999); // → "9999"
zh.format(12345); // → "1.2万"
zh.format(1234567); // → "123万"
zh.format(123456789); // → "1.2亿"
new Intl.NumberFormat('en-US', { notation: 'compact' }).format(1234567);
// → "1.2M"
new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY', notation: 'compact' }).format(1234567);
// → "¥123万"- One million is
123万in zh-CN, not "1.2M". Don't translate the English abbreviation; pass the locale. - Compact output is for display only. Don't store it or parse it back into a number.
Q&A
Is ¥ the yuan or the yen?
It can be either. Show CNY or CN¥ wherever both currencies can appear, and keep the ISO code with every stored amount.
Is it yuan, renminbi or CNY?
All three, in different roles. Renminbi is the name of China's legal tender, and yuan is its unit. China's central bank law says: "The unit of the renminbi is yuan and the fractional units of the Renminbi are Jiao and Fen." CNY is the ISO 4217 code, and the ISO list names the currency "Yuan Renminbi". In Intl, currencyDisplay: 'name' gives 1,234.56 Chinese yuan in en-US and 1,234.56人民币 in zh-CN.
How do I show 万 and 亿 instead of K and M?
Pass zh-CN with notation: 'compact'. Intl switches to 万 at 10,000 and 亿 at 100,000,000. Don't hand-roll the thresholds.
How many decimals does CNY use?
Two (ISO 4217 minor unit 2), and Intl.NumberFormat applies them by default. Jiao and fen are the legal fractional units, but formatting only needs the code and the minor unit.
Formatting Examples
| Value | en-US |
|---|---|
| 1 | CN¥1.00 |
| 9.99 | CN¥9.99 |
| 100 | CN¥100.00 |
| 1234.56 | CN¥1,234.56 |
| 1000000 | CN¥1,000,000.00 |
Intl.NumberFormat
// Basic CNY formatting
new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'CNY',
}).format(1234.56);
// → "CN¥1,234.56"
// Minimum/maximum fraction digits
new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'CNY',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}).format(99);
// Example display precision: 2 decimal places
// ISO 4217 minor unit: 2
// Integer minor-unit storage
// CNY amount = value × 100Countries Using CNY
Continue your localization implementation
Connect this reference to the format, validation, and testing guidance used elsewhere on the site.
Formatting implementation
Numbers, currencies, dates, time zones, numbering systems, and production tests.
Failure patterns
Hardcoded copy, broken layouts, missing context, bidi, and cultural adaptation.
Standards reference
ISO country, currency, and language codes; BCP 47; E.164; and UPU S42.
Validation coverage
Provider evidence, country test cases, geocoding, deliverability, and phone checks.
Locale-aware numbers
Separators, grouping, currency precision, and Intl.NumberFormat patterns.
Localization testing
Pseudolocalization, test matrices, native review, and regional release gates.
Address and phone standards
UPU S42, E.164, adaptive forms, storage, parsing, and validation.
I18n architecture
Messages, Unicode, RTL, locale services, fallbacks, and delivery workflow.
Address formats
Country templates, field order, and accessible international forms.
Phone formats
E.164 storage, regional display, parsing, and validation.
Compare locales
Inspect the same numeric value across several country formats.
Interactive tools
Try number, address, and phone formatting in your browser.