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

如何在Perl中设置浮点精度?,perl,floating-point,floating-accuracy,Perl,Floating Point,Floating Accuracy,有没有一种方法可以设置Perl脚本的浮点精度(为3位),而不必专门针对每个变量进行更改 类似于TCL的产品: global tcl_precision set tcl_precision 3 没有办法在全球范围内改变这一点 如果只是为了显示,则使用sprintf(“%.3f”,即$value) 出于数学目的,请使用(int(($value*1000.0)+0.5)/1000.0)。这将适用于正数。不过,您需要将其更改为使用负数。使用或: 或者使用bignum执行以下操作: use bignum

有没有一种方法可以设置Perl脚本的浮点精度(为3位),而不必专门针对每个变量进行更改

类似于TCL的产品:

global tcl_precision
set tcl_precision 3

没有办法在全球范围内改变这一点

如果只是为了显示,则使用
sprintf(“%.3f”,即$value)

出于数学目的,请使用
(int(($value*1000.0)+0.5)/1000.0)
。这将适用于正数。不过,您需要将其更改为使用负数。

使用或:

或者使用
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)

请看以下示例: (6.02*1.25=7.525)

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


printf(“%.2f”,7.525)=7.53

将结果作为字符串处理并使用。像这样:

$result = substr($result,0,3);

如果你想做四舍五入,也要像字符串一样做。只需获取下一个字符并做出决定。

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

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

如果只是为了显示的目的,那么设置
$#='%.3f'
--参见
perldoc perlvar
$#
在Perl5.10中被删除:(@SinanÜnür不,你不能!例如:
Perl-E'$\u155;比如说sprintf(%.2f),$\u1000)
应该打印
0.16
,但是打印
0.15进一步了解浮点表示法。我对你的评论发表了评论,因为你可以使用_sprintf(“%.3f”,$value)来进行数学运算的语句也是不正确的(在某些情况下)。我认为,比大多数perl初学者(一个月前算上我)认为perl可以给出2位数精度的“好结果”——特别是当一位perl专家(您)说——可以使用…:):)您只需要三位数字,还是小数点后三位数字?有一点不同:)有没有办法做到这些?
if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
    $val = $1;  
}