Perl で浮動小数点の精度を設定するにはどうすればよいですか?
-
12-09-2019 - |
質問
変数ごとに特に変更せずに、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
substr
文字列として結果を処理し、使用A>。このように:
$result = substr($result,0,3);
あなたが丸め行いたい場合は、、あまりにも文字列としてそれを行います。ただ、次の文字を取得し、決定します。
それとも、小数点以下3桁目の後に来るものは何でも切り捨てる次使用することができます:
をif ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
$val = $1;
}
所属していません StackOverflow