为什么我使用拆分会失去精度?
我的目标是获得所有部分的小数部分.
我的目标是获得所有部分的小数部分.
$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";