我有一个巨大的有理数,我需要将其转换为十进制数。我怎么能这样做?
理性是这样创造的:
my $t;
{
use bigrat;
$t = (3 ** 1000) / (2 ** 1000);
}
我需要以十进制形式得到结果$ t(整数部分-dot-几位小数)
我该如何进行转换?
答案 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()
获取常规浮点数标量。