为什么我使用 split 会丢失精度?我的目标是只得到小数部分,全部。
$a = 123456789.123456789;
@b = split(/\./, $a);
$baseDec = "." . $b[1];
Run Code Online (Sandbox Code Playgroud)
上面给出了 $baseDec == .123457
但这给出了正确的精度:这是正确的方法吗? 更正:这给出了同样糟糕的精度!我没有正确测试代码。对不起!
$a = 123456789.123456789;
@b = split(/\./, $a);
$baseInt = $b[0];
$baseDec = $a - $baseInt;
Run Code Online (Sandbox Code Playgroud)
我应该使用 Math::BigFloat 吗?
编辑: $a 应该是一个字符串$a = "123456789.123456789";,然后原始代码有效。在我弄清楚如何让我的 Perl 与 longdouble 一起工作之前,我无法测试原始问题。答案似乎是我失去了精度,因为 $a 以双精度形式存储(52 位 ~ 15 位十进制数字,如下面@Ben 所述)。print $a给123456789.123457.