有没有办法设置 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中”,$值)。

请看下面的例子: (6.02×1.25 = 7.525)

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

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

或者以下截断第三位之后无论发生什么事,你可以使用小数点后:

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