変数ごとに特別に変更することなく、Perlスクリプトの浮動小数点精度(3桁)を設定する方法はありますか?
TCLに似たもの:
global tcl_precision
set tcl_precision 3
変数ごとに特別に変更することなく、Perlスクリプトの浮動小数点精度(3桁)を設定する方法はありますか?
TCLに似たもの:
global tcl_precision
set tcl_precision 3
使用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", $value);
ください。
数学的な目的では、を使用します(int(($value * 1000.0) + 0.5) / 1000.0)
。これは正の数で機能します。ただし、負の数で機能するように変更する必要があります。
sprintf( "%。3f"、$ value)の使用はお勧めしません。
次の例を見てください:(6.02 * 1.25 = 7.525)
printf("%.2f", 6.02 * 1.25) = 7.52
printf("%.2f", 7.525) = 7.53
結果を文字列として扱い、を使用しますsubstr
。このような:
$result = substr($result,0,3);
丸めを行う場合は、文字列としても実行します。次のキャラクターを手に入れて決めてください。
または、以下を使用して、小数点以下3桁目以降を切り捨てることができます。
if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
$val = $1;
}