我的变量是12.2345678
如果给出23.45
,那么我想打印12.23
如果给出23.456
,那么我想打印12.234
与printf "%.1f", $var
一样.1
如果给定的23.45
数量将根据.2f更改,如果给定23.456
的数量
答案 0 :(得分:4)
计算小数后面的位数,然后使用该值构造printf格式。 即
$result = sprintf( "%.${count}f", $num );
答案 1 :(得分:1)
sprintf
将使用参数来表示字段的精度,例如sprintf '%.*2f', 2, 3.14159
会导致"3.14"
。
我的解决方案就是这样的。请注意12.2345678
四舍五入到三位小数是12.235
,而不是12.234
。如果您需要截断,那么您需要一个不同的解决方案。
use strict;
use warnings;
my $var = 12.2345678;
for my $template ('23.45', '23.456') {
$template =~ /(\d*)\z/;
my $rounded = sprintf '%.*f', length $1, $var;
print $rounded, "\n";
}
<强>输出强>
12.23
12.235