Wednesday, October 18, 2006
Perl 펄] 숫자 3자리마다 쉼표 찍기 (1000단위 구분 콤마 넣기): Thousands Separators
commify 라는 것은, 숫자 3자리마다 즉 1000단위로 쉼표를 찍는 함수입니다.
엑셀과 달리, 일반적인 프로그램에서는 숫자에 쉼표를 넣으면 더 이상 숫자로서 간주되지 않고 문자열로서만 인식됩니다. 펄도 마찬가지입니다.
commify 함수에 숫자를 입력할 때, 좀 제한이 있습니다. 너무 큰 숫자나 소수점이 있는 숫자는 따옴표로 둘러싸서 문자열화하여 입력해 주어야 정확하게 출력됩니다.
숫자의 끝부분부터 매치시키며, 루프 속에서 숫자의 좌측으로 즉 앞쪽으로 이동합니다.
이미 쉼표화가 된 부분이나, 소수부는 (^[+-]?\d+)(\d{3}) 이런 정규식으로 매치되지 않기에, 점점 앞쪽으로 이동하게 됩니다.
$1 은 앞쪽 소괄호가 매치되는 내용
$2 는 뒤쪽 소괄호가 매치되는 내용이기에 그 사이에 쉼표(,)를 넣어주고 치환합니다.
▶▶ 정규식] 천(1000)단위 구분 기호 콤마/쉼표 넣은 숫자 매치 - Regex: Thousands Separators
엑셀과 달리, 일반적인 프로그램에서는 숫자에 쉼표를 넣으면 더 이상 숫자로서 간주되지 않고 문자열로서만 인식됩니다. 펄도 마찬가지입니다.
commify 함수에 숫자를 입력할 때, 좀 제한이 있습니다. 너무 큰 숫자나 소수점이 있는 숫자는 따옴표로 둘러싸서 문자열화하여 입력해 주어야 정확하게 출력됩니다.
숫자에 1000단위로 쉼표 넣기 예제
#!/usr/bin/perl
use strict; use warnings;
print commify(6873504617419), "\n";
# 6,873,504,617,419
# 소수점까지 정확히 출력하려면 따옴표를 사용해야
print commify("68735046174190.32643523"), "\n";
# 68,735,046,174,190.32643523
# 너무 큰 수라서 정수로 출력되지 않음
print commify(263124587461082927396438), "\n";
# 2.63124587461083e+023
# 따옴표로 둘러, 문자열로 만들면 실수화되지 않음
print commify("263124587461082927396438"), "\n";
# 263,124,587,461,082,927,396,438
sub commify {
$_ = $_[0];
while ( s/(^[+-]?\d+)(\d{3})/$1,$2/ ) { };
return $_;
}
use strict; use warnings;
print commify(6873504617419), "\n";
# 6,873,504,617,419
# 소수점까지 정확히 출력하려면 따옴표를 사용해야
print commify("68735046174190.32643523"), "\n";
# 68,735,046,174,190.32643523
# 너무 큰 수라서 정수로 출력되지 않음
print commify(263124587461082927396438), "\n";
# 2.63124587461083e+023
# 따옴표로 둘러, 문자열로 만들면 실수화되지 않음
print commify("263124587461082927396438"), "\n";
# 263,124,587,461,082,927,396,438
sub commify {
$_ = $_[0];
while ( s/(^[+-]?\d+)(\d{3})/$1,$2/ ) { };
return $_;
}
숫자의 끝부분부터 매치시키며, 루프 속에서 숫자의 좌측으로 즉 앞쪽으로 이동합니다.
이미 쉼표화가 된 부분이나, 소수부는 (^[+-]?\d+)(\d{3}) 이런 정규식으로 매치되지 않기에, 점점 앞쪽으로 이동하게 됩니다.
$1 은 앞쪽 소괄호가 매치되는 내용
$2 는 뒤쪽 소괄호가 매치되는 내용이기에 그 사이에 쉼표(,)를 넣어주고 치환합니다.
▶▶ 정규식] 천(1000)단위 구분 기호 콤마/쉼표 넣은 숫자 매치 - Regex: Thousands Separators
tag: perl
Perl | 펄
tag: regex
정규식 | 정규표현식 | Regex | Regular Expression
<< Home