人类可读的数字

7

有没有一种简单且动态的方法将字符串中的数字格式化为易于阅读的形式?例如,将 10000000000 转换为 10,000,000,000。我看过这个问题,但答案已经过时且无法使用(包括其中的示例答案)。


5
以下是所需翻译内容:如何在 Rust 中使用千位分隔符格式化数字?我想将数字格式化为千位分隔符,例如将 123456789 格式化为 "123,456,789"。在 Rust 中是否有内置的功能或标准库函数可实现此需求? - Cecilio Pardo
3个回答

5
请尝试以下伪算法:
  1. 将字符串长度除以3
  2. 将其向下取整,我们称之为x
  3. 倒序循环字符串x次:

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

3

我从这里翻译了一个解决方案,虽然我从未使用过Rust语言:

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"


2

对于我的语言环境,这似乎可以工作!可能不是最符合Rust语言习惯的写法,但它是可行的。

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
这对于一些负数是行不通的,例如尝试“-100000000”。 - Dylan James McGannon
@DylanJamesMcGannon 感谢您指出这个问题。我已经解决了它。 - Jared Mackey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接