如何将Perl bigrat转换为bignum?

时间:2014-07-17 14:26:37

标签: perl bignum

我有一个巨大的有理数,我需要将其转换为十进制数。我怎么能这样做?

理性是这样创造的:

my $t;
{
    use bigrat;
    $t = (3 ** 1000) / (2 ** 1000);
}

我需要以十进制形式得到结果$ t(整数部分-dot-几位小数)

我该如何进行转换?

2 个答案:

答案 0 :(得分:3)

bigrat尝试通过重载运算符来透明地完成所有操作,以便您可以在不知道正在使用的基础对象的情况下工作。但它并不总能使一切正确,您需要直接使用Math::BigRat来获得对中间数字格式的必要控制。

此代码可以满足您的要求。 as_float的参数表示输出中需要多少位数。由于3 1000 ÷2 1000 大于1e176,因此需要超过176的东西才能显示小数点。值200表示前23位小数。

use strict;
use warnings;
use 5.010;

use Math::BigRat;

my $t = do {
  my $num = Math::BigRat->new(3) ** 1000;
  my $den = Math::BigRat->new(2) ** 1000;
  $num / $den;
};

say $t->as_float(200);

<强>输出

123384059690617347922743909948678005742186900514842808542522975184329422623652841193932245134021231941529455308114511924428000273557831297406949841351167568024301164105271903064.98735542425778400198655

答案 1 :(得分:2)

相同
use Math::BigRat qw( );

my $t = (Math::BigRat->new(3) ** Math::BigRat->new(1000))
      / (Math::BigRat->new(2) ** Math::BigRat->new(1000));

Math::BigRat提供了

  • ->as_float()获取Math :: BigFloat

  • ->numify()获取常规浮点数标量。