让perl以非科学记数法打印
Getting perl to print in non scientific notation
我是运行
./script.pl 69032 text.txt
其中 text.txt 包含
1 29 239 6
我得到
1 29 239 8.69162127708889e-05
作为输出,但我只希望最后一个数字是
1 29 239 .0000869162127708889
这是我的脚本
$percent=$ARGV[0];
shift;
while(<>){
my $temp = $_;
my ($num, $start, $stop, $exp) = split("\t", $temp);
if( defined($exp)){
print $num,"\t",$start,"\t",$stop,"\t",$exp/$percent,"\n";
}
}
使用printf
for formatted printing. The details of format specifiers are given in sprintf
.
printf("%d\t%d\t%d\t%10.8f\n", $num, $start, $stop, $exp/$percent);
"..."
中的字符串是您指定格式的位置。其余部分是在每个 %
说明符的字符串中使用的变量列表,通常按它们出现的顺序排列。 sprintf
returns 一个字符串,而 printf
打印到 STDOUT
,或者如果作为第一个参数 printf($fh "...", @vars)
给出,则打印到另一个文件句柄。这是最古老、最古老的工具之一。
上面我们有:一个整数%d
,然后是一个制表符\t
,然后是相同的两倍,然后是总宽度字段中要打印的浮点数10
(包括小数点和可能的符号),小数点后有 8
位。整数根据需要在输出中使用尽可能多的 space —— 一个用于 1
,三个用于 239
。如果你想排列输出你可以指定字段的最小宽度
printf("%3d\t%3d\t%3d\t%10.8f\n", $num, $start, $stop, $exp/$percent);
现在每个整数需要三个 space,右对齐。要在左侧对齐,请使用 %-3d
。要有前导零,你会说 %03d
,因为 001
。字符串也可以打印在固定宽度的字段中,所以
printf("%4s %6s %6s %12s\n", qw(num start stop factor));
printf("%4d %6d %6d %12.8f\n", $num, $start, $stop, $exp/$percent);
打印
num start stop factor
1 29 239 0.00008692
上面我选择了字段宽度以获得舒适的布局,并使用文字 spaces 作为它们之间的分隔符。 (如果条目不适合制表位,制表符可能会扰乱视觉对齐。如果这转到数据文件,即使它们也不是解析的糖,但对未来的解析没有影响。)如果你使用逗号代替生成 CSV 文件。
人们可以用它做很多事情。它用于从精确的格式转换到打印数据文件或体面的 (ASCII) 报告的任何事情。 sprintf
页面详细介绍了很多示例。
我是运行
./script.pl 69032 text.txt
其中 text.txt 包含
1 29 239 6
我得到
1 29 239 8.69162127708889e-05
作为输出,但我只希望最后一个数字是
1 29 239 .0000869162127708889
这是我的脚本
$percent=$ARGV[0];
shift;
while(<>){
my $temp = $_;
my ($num, $start, $stop, $exp) = split("\t", $temp);
if( defined($exp)){
print $num,"\t",$start,"\t",$stop,"\t",$exp/$percent,"\n";
}
}
使用printf
for formatted printing. The details of format specifiers are given in sprintf
.
printf("%d\t%d\t%d\t%10.8f\n", $num, $start, $stop, $exp/$percent);
"..."
中的字符串是您指定格式的位置。其余部分是在每个 %
说明符的字符串中使用的变量列表,通常按它们出现的顺序排列。 sprintf
returns 一个字符串,而 printf
打印到 STDOUT
,或者如果作为第一个参数 printf($fh "...", @vars)
给出,则打印到另一个文件句柄。这是最古老、最古老的工具之一。
上面我们有:一个整数%d
,然后是一个制表符\t
,然后是相同的两倍,然后是总宽度字段中要打印的浮点数10
(包括小数点和可能的符号),小数点后有 8
位。整数根据需要在输出中使用尽可能多的 space —— 一个用于 1
,三个用于 239
。如果你想排列输出你可以指定字段的最小宽度
printf("%3d\t%3d\t%3d\t%10.8f\n", $num, $start, $stop, $exp/$percent);
现在每个整数需要三个 space,右对齐。要在左侧对齐,请使用 %-3d
。要有前导零,你会说 %03d
,因为 001
。字符串也可以打印在固定宽度的字段中,所以
printf("%4s %6s %6s %12s\n", qw(num start stop factor));
printf("%4d %6d %6d %12.8f\n", $num, $start, $stop, $exp/$percent);
打印
num start stop factor 1 29 239 0.00008692
上面我选择了字段宽度以获得舒适的布局,并使用文字 spaces 作为它们之间的分隔符。 (如果条目不适合制表位,制表符可能会扰乱视觉对齐。如果这转到数据文件,即使它们也不是解析的糖,但对未来的解析没有影响。)如果你使用逗号代替生成 CSV 文件。
人们可以用它做很多事情。它用于从精确的格式转换到打印数据文件或体面的 (ASCII) 报告的任何事情。 sprintf
页面详细介绍了很多示例。