如何根据给定的示例号码舍入数字

时间:2013-11-26 00:31:37

标签: perl numbers rounding

我的变量是12.2345678

如果给出23.45,那么我想打印12.23

如果给出23.456,那么我想打印12.234

printf "%.1f", $var一样.1如果给定的23.45数量将根据.2f更改,如果给定23.456的数量

,则会更改.3f

2 个答案:

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