如何在 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中”,$值)。
请看下面的例子: (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;
}
不隶属于 StackOverflow