perl如何写科学记数法?
Posted
技术标签:
【中文标题】perl如何写科学记数法?【英文标题】:How to write scientific notation in perl? 【发布时间】:2015-08-04 13:40:19 【问题描述】:我一直在做一个程序,下一个目标我基本上不得不说
“在[27]列中如果值大于
10^-8
删除文件”
如何在程序中写入10^-8
?
#!/usr/local/bin/perl
use strict;
use warnings;
my @traitarray;
my $traitarray;
my $input ;
my %traithash ;
my $t_out ;
my $TRAIT;
my $SNPS;
open ($input, "gwas_catalog_v1.0-downloaded_2015-07-31.tsv") || die () ;
while(<$input>)
@traitarray = split (/\t/);
$TRAIT = $traitarray[7];
$SNPS = $traitarray[21];
if (!exists $traithash $TRAIT)
$TRAIT =~ tr/ /_/ ;
$TRAIT =~ tr/:/-/ ;
$TRAIT =~ tr/\//-/ ;
$TRAIT =~ tr/*/-/ ;
open ($t_out, ">outputFiles/".$TRAIT.".txt");
print $t_out "$SNPS\n";
$traithash $TRAIT = 1 ;
push (@traitarray, $TRAIT) ;
else
print $t_out "$SNPS\n";
foreach ($traitarray)
close "$TRAIT.txt";
列 [27] 大约有 30,000 行,格式为“6E-12”、“12E-9”等...
【问题讨论】:
第 27 列是什么?示例:perl -E 'say 1e-8*1e8'
更多信息请见perlnumber
..
你应该发布代码
顺便说一句,tr
一次可以做多个字符:$TRAIT =~ tr :/*_\-\--;
$traitarray
从来没有任何内容,应该被删除。你实际使用它的地方应该改为foreach my $TRAIT (@traitarray) close "TRAIT.txt";
,你应该在use strict;
和use warnings;
旁边添加use autodie;
,或者检查open
和close
的返回值。我鼓励您阅读本书Modern Perl,出版商已免费提供多种格式的在线阅读including html。
【参考方案1】:
只需使用1e-8
e
是指数的常用符号。
例如:5.5e100
是 (5.5 * 10^100)
更多信息:Wikipedia、perlnumber(感谢 Håkon Hægland)
【讨论】:
【参考方案2】:Anachor already correctly pointed 表明 Perl 理解指数符号。但还有更多。
幸运的是,您的数据看起来与指数符号完全一样。因为 Perl 不区分数字和字符串,所以您可以在该值上使用数字运算符。所以你可以直接这样说:
my $small_number = "6E-12";
if ($small_number > 8e-10)
say "Over threshhold, I should delete this...";
当然,如果您的第 27 列中除了数字之外还有其他内容,则会发出警告(因为您有 use warnings
,对吧?)。
【讨论】:
以上是关于perl如何写科学记数法?的主要内容,如果未能解决你的问题,请参考以下文章