NumberFormat
NumberFormat
class는intl
package에서 제공하는 local-specific number formatting class- “Locale-specific"이란, 문자열을 formatting 할 때 특정 text나 symbol을 locale에 맞게 변환해 주는 것
- ICU formatting pattern을 사용해서 number format 지정
0
: a single digit#
: a single digit, omitted if the value is zero.
: decimal separator¤
(\u00A4) : currency sign
- Examples
NumberFormatter("###.0#").format(12.345); // 12.34
Currency formatting
NumberFormatter
는 currency formatting을 위한 named constructor를 제공함NumberFormat.currency(locale,name,symbol,decimalDigits,customPattern)
locale
:₩
,$
등 화폐 단위를 표기를 위한 localename
: 화폐 단위로 ISO 4217 code 사용symbol
: 화폐 단위로 custom sign 사용 (name
을 덮어씀)decimalDigits
: 소수점 아래 자릿수customPattern
: custom pattern 사용
- Examples (
en
locale 기준)NumberFormat.currency().format(123456); // USD123,456.00 NumberFormat.currency(name: "N").format(123456); // N123,456.00 NumberFormat.currency(symbol: "S").format(123456); // S123,456.00 NumberFormat.currency(name: "N", symbol: "S").format(123456); // S123,456.00 NumberFormat.currency(locale: "ko").format(123456); // KRW123,456.00
Currency formatting with simple and compact expression
NumberFormat.currency()
는 통화 단위로 ISO4217 code를 사용하며 길이가 긴 숫자도 그대로 표시- Simple expression은 통화 단위를 ISO4217 code에 해당하는 기호로 대체
- Compact expression은 숫자를 천 단위는
K
로, 백만 단위는M
로 축약 표기 (통화와 직접 관련은 없음. Number formatting의 기능) - 관련 생성자들
NumberFormat.simpleCurrency
NumberFormat.compactCurrency
NumberFormat.compactSimpleCurrency
- Examples
NumberFormat.simpleCurrency().format(123456); // $123,456 NumberFormat.compactCurrency().format(123456); // USD123K NumberFormat.compactSimpleCurrency().format(123456); // $123K
화폐 단위 오른쪽에 놓기
NumberFormatter
로 formatting한 문자열에서는 화폐 단위가 항상 왼쪽에 나타난다.10,000원
처럼 단위를 오른쪽에 적고 싶다면customPattern
을 사용할 수 있다.- Examples
NumberFormat.currency( symbol: "원", customPattern: "###,###\u00A4", decimalDigits: 0, ).format(123456); // 123,456원
Formatting with name
NumberFormat
객체를 만들 때name
을 사용하면 ISO4217 규격에 해당하는 통화 코드를 사용- 규격에 맞지 않는 문자열을 사용하면
symbol
처럼 동작 NumberFormat.simpleCurrency()
에서는name
에 ISO4217 규격 code를 사용하면 해당 국가의 화폐 단위로 변환됨NumberFormat.simpleCurrency().format(123456); // $123,456.00 NumberFormat.simpleCurrency(name: "KRW").format(123456); // ₩123,456 NumberFormat.simpleCurrency(name: "JPY").format(123456); // ¥123,456 NumberFormat.simpleCurrency(name: "OTHER").format(123456); // OTHER123,456
NumberFormat.currency()
에서는name
에 code를 사용해도 code를 그대로 출력하므로symbol
을 사용할 때와 같게 동작한다.- 의미상 ISO4217 code를 사용하여 화폐 단위를 formatting할 때는
name
을 사용하고, custom sign을 사용하고 싶다면symbol
을 사용하는게 좋은 것 같다.