如何在Perl中设置浮点精度?
有没有一种方法可以设置Perl脚本的浮点精度(为3位),而不必专门针对每个变量进行更改 类似于TCL的产品:如何在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
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;
}