1

这里的想法是将数字"12.0"打印为"12",但不更改部分数字,例如"14.6".

当然,有很多方法可以解决它,但以下对我来说似乎不够 DWIM/优雅。

  1. s#\.0+$## for ( "12.0", "14.6" );

  2. $_ = int($_)==$_ ? int($_) : $_ for ( "12.0", "14.6" );

4

2 回答 2

5

您可以使用以 DWIM 方式打印的数字:

say 0+$_ for @numbers;

或者如果你想使用sprintf格式,你可以使用%g模式。这会打印出类似%eor的数字%f。对于小整数,%e行为类似于%d.

printf "%g\n", $_ for "200000000.0", "12.0", "16.13";

输出:

2e+08
12
16.13
于 2013-05-23T08:46:40.710 回答
1
my @array = map { $_ + 0 } ( "12.0", "14.6" );
于 2013-05-23T08:46:19.053 回答