我有一个数字,需要为它添加一个小数来进行格式化。
这个数字保证在1000到999999之间(我已经用其他方式涵盖了其他可能性,这是我无法理解的)。我需要在最后3位之前加上一个小数,例如:
1000 -> 1.000
23513 -> 23.513
999999 -> 999.999
我该怎么做?
答案 0 :(得分:44)
另一种有趣的方式; - )
my $num_3dec = sprintf '%.3f', $num / 1000;
答案 1 :(得分:14)
这是另一种解决方案,只是为了它的乐趣:
在Perl中,substr()可以是一个左值,它可以帮助您。
substr ($num , -3 , 0) = '.';
将在最后三位数之前添加一个点。
您还可以使用substr的四个参数版本(在注释中指出)来获得相同的效果:
substr( $num, -3, 0, '.' );
我希望它比正则表达式解决方案更优雅/可读,但我相信它会抛弃任何不习惯将substr()用作左值的人。
答案 2 :(得分:10)
$num =~ s/(\d{3})$/.$1/
这就是说:取一个3位数的块(必须锚定在字符串的END处)并用“.
”替换它们,后跟刚刚匹配的任何数字。
答案 3 :(得分:2)
高尔夫球吗?
substr $num,-3,0,'.';
答案 4 :(得分:2)
我在这里遗漏了什么吗?如果你有一个介于999999和1000之间的数字代表一个介于999.999和1.000之间的数字你应该能够:
$ num / = 1000.000;
/ PF
答案 5 :(得分:1)
这个怎么样?
$num = reverse $num;
$num =~ s/\d{3}(?=\d)/$&./g;
$num = reverse $num;