我正在尝试在Perl中使用bignum模块并想要设置精度.我知道这可以通过一个内衬来完成,详见模块的CPAN页面:
$ perl -Mbignum=p,-50 -le 'print sqrt(20)'
Run Code Online (Sandbox Code Playgroud)
...它将打印出20到50位精度的平方根,但我想知道的是,无论如何都要在脚本中设置精度,例如:
#!/usr/bin/perl
use bignum;
setPrecision(-50);
print sqrt(20);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在这里,Google和PerlMonks都没有运气.提前致谢.
显示问题的示例:
现在,几个脚本 - 基于另一个问题的答案:
这主要是经过推荐的,而且大部分是投票使用的解决方案printf.
use 5.014;
use warnings;
my $i = 105;
printf "%.2f\n", $i/1000; #prints 0.10
Run Code Online (Sandbox Code Playgroud)
但打印错误的结果.在评论 /sf/answers/128721981/ @Sinan Unur说(6次评论):
使用sprintf("%.3f",$ value)也可用于数学目的.
但是,它"有时"不起作用......就像上面一样.
另一个推荐的解决方案Math::BigFloat:
use 5.014;
use warnings;
use Math::BigFloat;
my $i = 105;
Math::BigFloat->precision(-2);
my $r = Math::BigFloat->new($i/1000);
say "$r"; #0.10 ;(
Run Code Online (Sandbox Code Playgroud)
错误的结果也是如此.另一个推荐一个bignum:
use 5.014;
use warnings;
use bignum ( p => -2 );
my $i = 105;
my $r = $i/1000;
say "$r"; #0.10 ;(
Run Code Online (Sandbox Code Playgroud)
又错了.(
现在工作的人: …