Есть ли простой способ и динамический способ форматирования чисел в строке, чтобы их можно было прочитать? Например, превратить 10000000000
в 10,000,000,000
. Я видел этот вопрос, но ответы устарели и не работают ( один с примером).
Человекочитаемые числа [дубликаты]
comment
stackoverflow.com/questions/26998485 /
- person Cecilio Pardo   schedule 11.01.2016
Ответы (3)
Попробуйте этот псевдоалгоритм:
- Разделите длину строки на 3
- Округлите это значение в меньшую сторону, и мы назовем его
x
. Перебрать строку
x
раза в обратном порядке:- Get the string at
x
times 3 position, or index [(x times 3) - 1], we'll call ity
. - Замените
y
на"," + y
- Get the string at
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
Это не сработает для некоторых отрицательных чисел, например, попробуйте -100000000.
- person Dylan James McGannon; 11.01.2016
@DylanJamesMcGannon Спасибо, что указали на это. Я решил эту проблему.
- person Jared Mackey; 11.01.2016