为什么使用split会失去精度?
我的目标是只得到小数部分。
$a = 123456789.123456789;
@b = split(/\./, $a);
$baseDec = "." . $b[1];
上面给出了$ baseDec == .123457
但这给出了正确的精度:
这是正确的方法吗? 更正:这给了同样的错误!
我没有正确测试代码。对不起!
$a = 123456789.123456789;
@b = split(/\./, $a);
$baseInt = $b[0];
$baseDec = $a - $baseInt;
我应该使用Math::BigFloat吗?
编辑: $ a应该是一个字符串
$a = "123456789.123456789";
,然后原始代码有效。在我弄清楚如何让我的Perl与longdouble一起使用之前,我无法测试原始问题。答案似乎是我失去了精度,因为$ a是以 double 形式存储的(52位〜15个十进制数字,如下面的@Ben所述)。 print $a
给出123456789.123457
。 最佳答案
如果您要将其视为字符串,请一直这样做。您不会在不加引号的情况下分配字符串,对吗?
my $a = "123456789.123456789";