如何在数字的最后三位数之前插入小数点?

时间:2009-08-19 17:00:06

标签: perl

我有一个数字,需要为它添加一个小数来进行格式化。

这个数字保证在1000到999999之间(我已经用其他方式涵盖了其他可能性,这是我无法理解的)。我需要在最后3位之前加上一个小数,例如:

1000   -> 1.000
23513  -> 23.513
999999 -> 999.999

我该怎么做?

6 个答案:

答案 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;