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;,或者检查openclose的返回值。我鼓励您阅读本书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如何写科学记数法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在linux或perl的特定列中将科学记数法更改为数字

在 bash/perl 中将科学记数法转换为十进制(不是整数)

如何使用正则表达式捕获科学记数法中的减号?

关于perl bignum模块用法

如何把SQL server 表里插入转换科学计数法的方法。

java字符串转数字如何不显示科学计数法