3

Perl のsprintf関数を使用して、浮動小数点数の最大精度幅を指定することはできますか? ドキュメントを読んだ後、そうではないと思いますが、何かを見落としている可能性があります。

したがって、4.12 を持っている場合は、数値を としてフォーマットしたいと思い4.12ます。

my $abc = 4.12;
my $out = sprintf("%?...", $abc); # $out eq '4.12';

それでも、数値の精度が 6 桁を超える場合は、6 桁のみが必要です。

my $def = 1.23456789;
my $out = sprintf("%?...", $def); # $out eq '1.234568';

これは可能sprintfですか?

編集

Currentyl、私は使用しています

sub output_number {
  my $number = shift;

  my $ret = sprintf("%.6f", $number);

  $ret =~ s/0*$//g;
  $ret =~ s/\.$//g;

  return $ret;
}

私の目的のために、それは私が必要とすることをします。しかし、もっとエレガントな方法があることを願っていました。の使用に必ずしも制限されないワンライナーが望ましいsprintf

また、提案されたprintf ("%.7g", $number)ものは私が望むように動作しないことに注意してください(たとえば、$n = 0.00000000001;.

4

1 に答える 1

4

私はあなたが使うことができると信じています%.<n>g

perl -e 'printf "%.7g", 4.12'          =>   4.12
perl -e 'printf "%.7g", 4.12345678'    =>   4.123457

しかし、指数表記が本当にあなたの一日を台無しにし、あなたのインストールされたperlが十分に現代的であるならば、常にあります

sprintf("%.6f",$number) =~ s/\.?0+$//r
于 2012-11-16T16:13:54.513 に答える