16

変数ごとに特別に変更することなく、Perlスクリプトの浮動小数点精度(3桁)を設定する方法はありますか?

TCLに似たもの:

global tcl_precision
set tcl_precision 3
4

5 に答える 5

22

使用Math::BigFloatまたはbignum

use Math::BigFloat;
Math::BigFloat->precision(-3);

my $x = Math::BigFloat->new(1.123566);
my $y = Math::BigFloat->new(3.333333);

またはbignum代わりに行う:

use bignum ( p => -3 );
my $x = 1.123566;
my $y = 3.333333;

次に、どちらの場合も:

say $x;       # => 1.124
say $y;       # => 3.333
say $x + $y;  # => 4.457
于 2009-12-03T11:18:01.487 に答える
16

これをグローバルに変更する方法はありません。

表示のみを目的とする場合は、を使用してsprintf("%.3f", $value);ください。

数学的な目的では、を使用します(int(($value * 1000.0) + 0.5) / 1000.0)。これは正の数で機能します。ただし、負の数で機能するように変更する必要があります。

于 2009-12-03T09:57:23.097 に答える
3

sprintf( "%。3f"、$ value)の使用はお勧めしません。

次の例を見てください:(6.02 * 1.25 = 7.525)

printf("%.2f", 6.02 * 1.25) = 7.52

printf("%.2f", 7.525) = 7.53

于 2011-06-08T18:00:24.187 に答える
1

結果を文字列として扱い、を使用しますsubstr。このような:

$result = substr($result,0,3);

丸めを行う場合は、文字列としても実行します。次のキャラクターを手に入れて決めてください。

于 2012-11-28T17:51:59.347 に答える
0

または、以下を使用して、小数点以下3桁目以降を切り捨てることができます。

if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
    $val = $1;  
}
于 2012-12-19T18:07:19.647 に答える