perl格式不起作用



我的perl代码中有数字行,可以计算2个变量之间的差异

$diff = $upper- $lower;

可变上和下部的值可以是十进制,分数和指数。

当我将此差异打印到文件上时,我想保留格式,但要在小数点3个位置后截断分数值。我该怎么做?

例如,在不同情况下,

$diff =0.345664; I want to print as 0.346
$diff= 65.9787e-6; I want to print as 65.979e-06.

有人可以帮我如何做吗?我正在使用%.3f,但显然它与指数数字混乱。

尽管有其他答案,但在我看来,您想要的只是使用%.3g,它将保留3个重要数字,但随后丢弃任何尾随的0 s。默认情况下,perl的格式用来字符串数字通常为 %.15g

perl -e'printf "%.3gn", $_ for 0.345664, 0.349876, 65.9787e-6, 6.59123e-5'
0.346
0.35
6.6e-05
6.59e-05

尝试此

printf "%.3fn", $diff;

printf "%.3en", $diff;

顺便说一句,只有 integer 浮点在perl

$diff = 0.345664;
printf "%.3fn", $diff;
$diff = 65.9787e-6;
printf "%.3en", $diff;

输出

0.346
6.598e-005

没有一种格式指定符可以根据变量的值提供两种格式 - 您必须编写代码才能自己做出决定

也无法使用%e格式获得65.98e-006而不是6.598e-005。小数点之前总是有一个非零数字

sub format1 { sprintf "%.3f", $_[0] }
say format1(0.345664);  # 0.346

 

sub format2 {
   sprintf("%.4e", $_[0])
      =~ s/.(.)/$1./sr
         =~ s/([+-]dd)z/ sprintf("%+03d", $1-1) /aer
}
say format2(65.9787e-6);  # 65.979e-06

相关内容

最新更新