我的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