質問

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

TCL に似たもの:

global tcl_precision
set tcl_precision 3
役に立ちましたか?

解決

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

これは表示目的のためだけであれば、sprintf("%.3f", $value);を使用します。

数学的目的のためには、(int(($value * 1000.0) + 0.5) / 1000.0)を使用しています。これは、正の数のために働くだろう。あなたはしかし、負の数で動作するようにそれを変更する必要があります。

他のヒント

使用 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

私はsprintfの( "%。3F"、$値)を使用することをお勧めしません。

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

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

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

それとも、小数点以下3桁目の後に来るものは何でも切り捨てる次使用することができます:

if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
    $val = $1;  
}
scroll top