繁体   English   中英

如何在 Perl 中设置浮点精度?

[英]How do I set the floating point precision in Perl?

有没有办法设置 Perl 脚本的浮点精度(到 3 位),而不必专门为每个变量更改它?

类似于 TCL 的东西:

global tcl_precision
set tcl_precision 3

使用Math::BigFloatbignum

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);

如果您想进行舍入,也可以将其作为字符串进行。 只需获取下一个角色并决定。

或者您可以使用以下内容截断小数点后第三位数字之后的内容:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM