¥

CNY — Chinese Yuan Renminbi

fiat
ISO Code: CNYNumeric: 156ISO minor unit: 2Region: Asia
🇨🇳

Developer 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 narrowSymbol for 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

Valueen-US
1CN¥1.00
9.99CN¥9.99
100CN¥100.00
1234.56CN¥1,234.56
1000000CN¥1,000,000.00

Intl.NumberFormat

JavaScript
// 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 × 100

Countries Using CNY