2016-01-10 19 views
5

Có cách nào dễ dàng và năng động để định dạng số trong chuỗi để có thể đọc được không? Ví dụ: biến 10000000000 thành 10,000,000,000. Tôi đã nhìn thấy this câu hỏi nhưng câu trả lời là lỗi thời và bị hỏng (một trong những ví dụ).Số có thể đọc được của con người

+5

http: // stackoverflow.com/questions/26998485/rust-print-format-number-with-thousand-separator –

Trả lời

2

Đối với miền địa phương của tôi này dường như làm việc! Có lẽ không phải là chất độc thành phần nhất, nhưng nó có chức năng.

fn readable(mut o_s: String) -> String { 
    let mut s = String::new(); 
    let mut negative = false; 
    let values: Vec<char> = o_s.chars().collect(); 
    if values[0] == '-' { 
     o_s.remove(0); 
     negative = true; 
    } 
    for (i ,char) in o_s.chars().rev().enumerate() { 
     if i % 3 == 0 && i != 0 { 
      s.insert(0, ','); 
     } 
     s.insert(0, char); 
    } 
    if negative { 
     s.insert(0, '-'); 
    } 
    return s 
} 

fn main() { 
    let value: i64 = -100000000000; 
    let new_value = readable(value.to_string()); 
    println!("{}", new_value); 
} 
+1

Điều này sẽ không hoạt động đối với một số số âm, hãy thử "-100000000" chẳng hạn. –

+0

@DylanJamesMcGannon Cảm ơn bạn đã chỉ ra điều đó. Tôi đã giải quyết vấn đề đó. – electrometro

4

Hãy thử thuật toán psuedo này:

  1. Divide chuỗi chiều dài bằng 3
  2. Vòng mà xuống, và chúng tôi sẽ gọi nó là x
  3. Vòng qua chuỗi x lần, đi ngược:

    1. Nhận chuỗi tại x lần 3 vị trí hoặc chỉ mục [(x lần 3) - 1], chúng tôi sẽ gọi nó là y.
    2. Thay y với "," + y
3

Tôi chưa bao giờ sử dụng chất tẩy rửa trong cuộc sống của tôi, nhưng đây là những gì tôi đã đưa ra bằng cách dịch một giải pháp từ here:

fn main() { 
    let i = -117608854; 
    printcomma(i); 
} 

fn printcomma(mut i: i32) { 
    if i < 0 { 
     print!("-"); 
     i=-i; 
    } 
    if i < 1000 { 
     print!("{}", i.to_string()); 
     return; 
    } 
    printcomma(i/1000); 
    print!(",{:03}", i%1000); 
} 

lợi nhuận "-117.608.854"

Các vấn đề liên quan