formatting trait와 placeholder, formatter 기본 옵션에 대해 알아보고, 천단위 구분 표시(나라별 차이)에 대해서도 추가로 알아보겠습니다.
1. formatting trait과 placeholder
trait | placeholder 예 | 설명 |
---|---|---|
Display | {} | 사용자 친화적 출력 |
Debug | {:?}/{:#?} | 개발·디버그 출력 / Pretty print |
Binary | {:b} | 2진수 |
Octal | {:o} | 8진수 |
LowerHex | {:x} | 16진수(소문자) |
UpperHex | {:X} | 16진수(대문자) |
Pointer | {:p} | 포인터 주소 |
LowerExp | {:e} | 지수 표기법(소문자 e) |
UpeperExp{:E} | {:E} | 지수 표기법(대문자 E) |
2. Formatter 옵션 (기본)
{[arg]:[fill][align][sign][#][0][width][.precision][type]}
옵션 | 의미 | 예시 | 결과 |
---|---|---|---|
{} | 자동 인덱스 | println!(“{} {}”, 1, 2); | “1 2” |
{0}(1} | 위치 인덱스 | println!(“{0} {1} {0}”, “a”, “b”); | “a b a” |
{name} | 이름(키) 인자 | println!(“{name} is {age}”, name=”Alice”, age=30); | “Alice is 30” |
< | 왼쪽 정렬 | {:<10} | “left “ |
> | 오른쪽 정렬 | {:>10} | ” right” |
^ | 가운데 정렬 | {:^10} | ” center “ |
fill | 채움 문자 변경 | {:*^10}” | “***hi****” |
width | 폭 지정 | {:8}” | ” 42″ |
width$ | 변수 폭 지정 | {:width$}” | 폭이 변수값 |
+ | 항상 부호 표시. 양수도 +, 음수는 – ※ 기본은 음수만 – 표시하고, 양수는 미표시 | {:+}” | +42 |
‘ ‘(공백) | (열 맞추기 위해) 양수일 때 공백 한 칸 추가 | println!(“{: }”, 42); | ” 42″ |
# | 진번 접두사 표시 | #{:#x}” | “0x2a” |
0 | 제로 패딩(0으로 채움) | println!(“{:08.2}”, 3.14159); | “00003.14” (폭 8, 소수점 2자리) |
.precision | 소수점 자리수 | {:.2} | “3.14” |
3. 천 단위 구분 쉼표
Rust 표준 라이브러리에는 없으므로 외부 크레이트 또는 수동 구현이 필요합니다.
가. num-format (다국어 지원)
[dependencies]
num-format = "0.4"
use num_format::{Locale, ToFormattedString};
fn main() {
let n = 123456789;
println!("{}", n.to_formatted_string(&Locale::en)); // 123,456,789
println!("{}", n.to_formatted_string(&Locale::de)); // 123.456.789
}
나. separators (경량)
[dependencies]
separators = "0.4"
use separators::Separatable;
fn main() {
let n = 123456789;
println!("{}", n.separated_string()); // 123,456,789
}
다. 직접 구현
fn format_with_commas(n: i64) -> String {
let s = n.to_string();
let mut chars: Vec<char> = s.chars().rev().collect();
let mut result = String::new();
for (i, c) in chars.iter().enumerate() {
if i != 0 && i % 3 == 0 {
result.push(',');
}
result.push(*c);
}
result.chars().rev().collect()
}
fn main() {
println!("{}", format_with_commas(123456789)); // 123,456,789
}
4. 예시 모음
fn main() {
let n = 42;
println!("{:<10}", n); // 왼쪽 정렬
println!("{:>10}", n); // 오른쪽 정렬
println!("{:^10}", n); // 가운데 정렬
println!("{:*^10}", n); // 가운데 정렬 + * 채움
println!("{:08}", n); // 0으로 채움
println!("{:+}", n); // +42
println!("{:#x}", n); // 0x2a
println!("{:b}", n); // 101010
println!("{:width$}", n, width = 6); // 변수 폭 지정
}