Rust Formatting Cheat Sheet

formatting trait와 placeholder, formatter 기본 옵션에 대해 알아보고, 천단위 구분 표시(나라별 차이)에 대해서도 추가로 알아보겠습니다.

1. formatting trait과 placeholder

traitplaceholder 예설명
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); // 변수 폭 지정
}