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 : , $ 등 화폐 단위를 표기를 위한 locale
    • name : 화폐 단위로 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을 사용하는게 좋은 것 같다.