如何在perl中写出科学记数法?

时间:2015-08-04 13:40:19

标签: perl scientific-notation

我一直在研究一个项目,我必须说明下一个目标

  

“如果值大于10^-8,则在列[27]中删除文件”

如何在程序中编写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“等...

2 个答案:

答案 0 :(得分:5)

只需使用1e-8

即可

e是指数的常用符号。

示例:5.5e100是(5.5 * 10 ^ 100)

更多信息:Wikipediaperlnumber(感谢HåkonHægland)

答案 1 :(得分: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,对吧?)。