Человекочитаемые числа [дубликаты]

Есть ли простой способ и динамический способ форматирования чисел в строке, чтобы их можно было прочитать? Например, превратить 10000000000 в 10,000,000,000. Я видел этот вопрос, но ответы устарели и не работают ( один с примером).


person Jared Mackey    schedule 10.01.2016    source источник
comment
stackoverflow.com/questions/26998485 /   -  person Cecilio Pardo    schedule 11.01.2016


Ответы (3)


Попробуйте этот псевдоалгоритм:

  1. Разделите длину строки на 3
  2. Округлите это значение в меньшую сторону, и мы назовем его x.
  3. Перебрать строку x раза в обратном порядке:

    1. Get the string at x times 3 position, or index [(x times 3) - 1], we'll call it y.
    2. Замените y на "," + y
person Quill    schedule 11.01.2016

Я никогда в жизни не использовал ржавчину, но вот что я придумал, переведя решение из здесь:

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

возвращает "-117 608 854"

person Dylan James McGannon    schedule 11.01.2016

Для моего региона это, похоже, сработало! Вероятно, это не самая идиоматическая ржавчина, но она функциональна.

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);
}
person Jared Mackey    schedule 11.01.2016
comment
Это не сработает для некоторых отрицательных чисел, например, попробуйте -100000000. - person Dylan James McGannon; 11.01.2016
comment
@DylanJamesMcGannon Спасибо, что указали на это. Я решил эту проблему. - person Jared Mackey; 11.01.2016