比如说
println!("{}", 10_000_000);
导致
10000000
而我想把它格式化成
10,000,000
我浏览了the fmt
module documentation,但没有任何内容可以涵盖这种特殊情况。
println!("{:,i}", 10_000_000);
但它会抛出一个错误
invalid format string: expected `}`, found `,`
比如说
println!("{}", 10_000_000);
导致
10000000
而我想把它格式化成
10,000,000
我浏览了the fmt
module documentation,但没有任何内容可以涵盖这种特殊情况。
println!("{:,i}", 10_000_000);
但它会抛出一个错误
invalid format string: expected `}`, found `,`
8条答案
按热度按时间xcitsw881#
num_format crate将为您解决这个问题。添加您的区域设置,它将发挥神奇作用。
9rnv2umw2#
使用
thousands
板条箱仅使用Rust标准库
Playground
50pmv0ei3#
现在没有,将来也不会有。
根据您所处的位置,千位分隔符也可以像
1,00,00,000
、1.000.000,000
或其他变体一样工作。本地化不是stdlib的工作,加上
format!
主要在编译时处理(尽管公平地说,这可以很容易地放在它的运行时部分),而且您不希望将一个语言环境硬烤到程序中。oyjwcjzk4#
下面是一个简单的整数实现
如果你想让它更通用于整数,你可以使用num::Integer特征
fcwjkofz5#
关于自定义函数,我尝试了一下,下面是一些想法:
游戏围栏:http://is.gd/UigzCf
欢迎评论,没有一个感觉真的很好。
06odsfpq6#
另一个解决方法是使用
separator
crate,它实现了浮点型、整型和size类型的.separated_string()
方法。它将提供以下输出:
注意,这样对齐浮点数并不容易,因为
separated_string()
返回一个字符串,然而,这是一个相对快速的方法来获得分隔的数字。e5nqia277#
手动编写代码来完成这一点是非常简单的。下面是一些直接操作字符串的代码。这样做的好处是允许你使用普通的方法来使用小数位格式(我认为现有的选项都不允许这样做)。同时它也避免了为如此简单的东西引入过于复杂的依赖关系。请随意复制/粘贴(公共领域):
zu0ti5jz8#
如果您不需要立即使用String,并且可能需要变量分组,那么您可能需要考虑基于迭代器的方法。