금융권이나 결제프로세스 등을 개발할 때 1000원이라는 단위를 표현하기 위해서는 1,000 이라고 뒤에서 부터 3개의 수를 끊고 " , " 컴머로 그룹을 만들어 준다. 또는 정확한 수를 표현하기 위하여 소수점을 섞어서 표현하기도 한다.

가령 1,234.56과 같은 수가 있다. 이처럼 통상적으로 소수점을 표현하거나 컴머로 그룹핑을 하는 것은 AS3에서 제공되지 않는다( 콜드퓨전에서는 제공한다. ) 따라서 이 역할만 전문적으로 전담하는 클래스(수의 단위를 표현하는 기능)가 있어야 한다.
여기서는 ascb의 라이브러리에서 util패키지에 NumberFormat 이라는 클래스를 활용하여 본다.

통상적으로 소수점 4자리까지 표현하고 만단위 까지 그룹핑하여 보여주고 싶다면 NumberFormat()의 생성자에서 마스크를 설정하여도 되고 mask라는 메서드로 접근하여 설정하여도 된다.
(mask는 setter/getter로 이루어져 있다)

* 수의 형태나 그루핑을 정하는 mask
마스크에서 파운드기호(#)는 어떠한 수나 공백으로 채워질 공간이고 ,는 그루핑하는 자리이다. 0은 숫자나 0으로 채워지도록 개발되어 있다.

* 마스크의 상수
0 : 숫자나 0으로 자리를 재워준다.
# : 숫자나 공백으로 자리를 채워준다.
. : 소수점의 공간이다.
, : 숫자를 그룹핑 한다.


##,###.000 이라는 마스크에 12345라는 수를 대입하면 결과는 12,345를 표현하게 된다.
또 1.2345를 대입하면 1.2345로 표현되고 1234.5를 대입하면 1,234.5로 표현된다.
12345      -> 12,345
1.2345     -> 1.2345
1234.5     -> 1,234.5


NumberFormat은 변수에 위임하여 생성한다.
var numberFormat:NumberFormat = new NumberFormat( "##,###.000" );
마스크는 생성자에서 설정하거나 또는 생성 후 mask 메서드를 통해 설정이나 수정할 수 있다.
numberFormat.mask = "#,###.00";
위와 같이 마스크를 ##.00으로 설정한 다음 아래와 같이 테스트한다.
trace(numberFormat.format( 1 ));                // 출력 : 1,00
trace(numberFormat.format( 12 ));              // 출력 : 12,00
trace(numberFormat.format( 123 ));            // 출력 : 123,00
trace(numberFormat.format( 1234 ));           // 출력 : 1.234,00
trace(numberFormat.format( 12345 ));         // 출력 : 1.2345,00


위의 출력 값을 보면 무언가 어색하다. 이는 프랑스나 스페인등에서 사용하는 통화 형식으로 우리와는 느낌이 다르다. 따라서 라이브러리에 Locale.slanguage라는 싱글턴 클래스로 접근하여 언어형식을 정한다. 상수는 Locale을 치고 코드힌트를 참고한다.

var numberFormat:NumberFormat = new NumberFormat( );
numberFormat.mask = "#,###.00";
Locale.slanguage = Locale.ENGLISH;
trace(numberFormat.format( 1 ));               // 출력 : 1.00
trace(numberFormat.format( 12 ));              // 출력 : 12.00
trace(numberFormat.format( 123 ));            // 출력 : 123.00
trace(numberFormat.format( 1234 ));           // 출력 : 1,234.00
trace(numberFormat.format( 12345 ));         // 출력 : 1,2345.00

trace(numberFormat.format( 12.3 ));            // 출력 : 12.30
trace(numberFormat.format( 123.4 ));           // 출력 : 123.40
trace(numberFormat.format( 1234.5 ));         // 출력 : 1,234.50


* 심벌 기호를 바꾸고 싶다
그루핑을 하는 " , " 심벌과 소수점을 표시하는 " . " 심벌은 다른 심벌로 교체가 가능하다.
var numberFormat:NumberFormat = new NumberFormat( );
trace(numberFormat.format( 1234567.89 , { group:" 컴머 " , decimal:" 점 " } ) ); 
// 출력 : 1 컴머 234 컴머 567 점 89

trace(numberFormat.format( 1234567.89 , { group:" * " , decimal:" ? " } ) );
 
// 출력 : 1 * 234 * 567 ? 89

delegate 객체에서 format을 정할 때 두번 째 파라미터의 값인 오브젝트를 통해
그룹을 정하는 group의 기호를 문자열로 선언하고, 소수점을 구분하는 기호인 decimal의 값도 문자열로
재선언하면 선언된 심벌로 교체하여 값을 보여준다.


AS3 cookbook이라는 사이트에서 이러한 라이브러리를 제공하고 있다.
라이브러리 다운로드

Posted by 버터백통