我有一个简单的请求,但在网上找不到任何关于它的东西。
这是针对Linux bash脚本的:
var1=123456
我希望输出如下所示:
1,234.56作为金额字段(始终为2个小数)
我尝试了不同的printf变体,但没有成功。
谢谢。
发布于 2017-04-29 21:22:08
它看起来非常像将数字转换为货币格式。考虑以下printf
方法:
LC_ALL=en_US.UTF-8 printf "%'.2f\n" ${var1%??}"."${var1:(-2)}
输出:
1,234.56
"%'.2f\n"
格式中的'
符号提供十进制转换
我要指出的是,上面的内容取决于您当前的LC=ALL
/LC_NUMERIC
语言环境变量(表示小数点、千位组分隔符)
发布于 2017-04-29 22:41:16
另一个正则表达式解决方案似乎可以工作到999,999.99,始终保留两位小数:
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"1"
1
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"12"
12
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"123"
1.23
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"1234"
12.34
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"12345"
123.45
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"123456"
1,234.56
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"1234567"
12,345.67
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"12345678"
123,456.78
https://stackoverflow.com/questions/43700165
复制