2016-01-10 9 views
5

Gibt es eine einfache und dynamische Möglichkeit, Zahlen in einer Zeichenkette so zu formatieren, dass sie für Menschen lesbar sind? Zum Beispiel drehen Sie 10000000000 in 10,000,000,000. Ich habe this Frage gesehen, aber die Antworten sind veraltet und gebrochen (die mit dem Beispiel).Für Menschen lesbare Zahlen

+5

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

Antwort

2

Für meine locale schien dies zu arbeiten! Wahrscheinlich ist nicht der idiomatische Rost, aber es ist funktional.

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

Dies funktioniert nicht für einige negative Zahlen, versuchen Sie "-100000000" zum Beispiel. –

+0

@DylanJamesMcGannon Danke, dass du darauf hingewiesen hast. Ich habe dieses Problem gelöst. – electrometro

4

diesen psuedo Algorithmus Versuchen:

  1. Teilen Sie die String-Länge von 3
  2. Runde, dass nach unten, und wir werden es x
  3. Schleife über den String x mal nennen, rückwärts:

    1. Holen Sie sich die Zeichenfolge bei x mal 3 Position, oder Index [(x mal 3) - 1], wir nennen es y.
    2. ersetzen y mit "," + y
3

Ich habe noch nie Rost in meinem Leben benutzt, aber das ist, was ich mit aufkommen, indem eine Lösung aus here übersetzen:

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); 
} 

returns "-117608854"