人类可读数字

时间:2016-01-10 23:05:46

标签: rust human-readable

是否有一种简单的方法和动态的方法来将字符串中的数字格式化为人类可读的?例如,将10000000000转换为10,000,000,000。我已经看到了this的问题,但答案已经过时并且已经过时(带示例的那个)。

3 个答案:

答案 0 :(得分:4)

试试这个伪造的算法:

  1. 将字符串长度除以3
  2. 将其缩小,我们称之为x
  3. 循环遍历字符串x次,后退:

    1. 获取字符串x次3位置,或索引[(x乘3次) - 1],我们称之为y
    2. y替换为"," + y

答案 1 :(得分:3)

我从未在生活中使用过锈,但这是我通过翻译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);
}

返回&#34; -117,608,854&#34;

答案 2 :(得分:2)

对于我的语言环境,这似乎有效!可能不是最惯用的生锈,但它具有功能性。

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