有没有办法设置Perl脚本的浮点精度(3位数),而不必专门为每个变量更改它?
类似于TCL的东西:
global tcl_precision
set tcl_precision 3
答案 0 :(得分:19)
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
答案 1 :(得分:14)
无法全局改变这一点。
如果仅用于显示目的,请使用sprintf("%.3f", $value);
。
出于数学目的,请使用(int(($value * 1000.0) + 0.5) / 1000.0)
。这适用于正数。您需要将其更改为使用负数。
答案 2 :(得分:3)
我不建议使用sprintf(“%。3f”,$ value)。
请查看以下示例: (6.02 * 1.25 = 7.525)
printf("%.2f", 6.02 * 1.25) = 7.52
printf("%.2f", 7.525) = 7.53
答案 3 :(得分:1)
答案 4 :(得分:0)
或者您可以使用以下内容截断小数点后第三个数字后面的内容:
if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
$val = $1;
}