为什么我的 Perl bigint 有小数位?
如果我在 substr 中使用大整数:
use BigInt;
$acct_hash = substr(('99999999999912345' + $data[1]),0,15);
为什么结果仍然是 9.9999999999912
?
我期待999999999999912
。 有类似这样的东西吗?
$data[1] = substr(to_char('999999999999991234'),0,15);
Perl 中
If I do use a big integer in substr:
use BigInt;
$acct_hash = substr(('99999999999912345' + $data[1]),0,15);
why is the result still 9.9999999999912
?
I was expecting 999999999999912
. Is there something like:
$data[1] = substr(to_char('999999999999991234'),0,15);
in Perl?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
要获取
$a
和$b
之和的前 15 位数字,请执行以下操作:您的代码未按预期工作的原因是 Perl 执行了浮动如果
$a
和$b
都是字符串,则$a + $b
的点加法,即使使用 bigint
已生效。 示例:此行为是 Perl bigint 模块中的一个怪癖。 您可以通过在前面添加
0 +
(如上所示)来解决此问题,从而强制 bigint 加法而不是浮点加法。 另一种解决方法可以是Math::BigInt->new($a) + $b
而不是0 + $a + $b
。To get the first 15 digits of the sum of
$a
and$b
, do this:The reason why your code didn't work as expected is that Perl does a floating point addition for
$a + $b
if both$a
and$b
are strings, even ifuse bigint
is in effect. Example:This behavior is a quirk in the Perl
bigint
module. You can work it around by prepending a0 +
(as shown above), thus forcing bigint addition instead of floating point addition. Another workaround can beMath::BigInt->new($a) + $b
instead of0 + $a + $b
.我认为你遇到的是字符串解释的问题。 试试这个代码:
并将其与非常相似的代码进行比较:
在数字周围使用单引号会将它们转换为字符串,并且似乎可以绕过
bigint
。I think what you're running into is a problem with string interpretation. Try this code:
And compare it to the very similar:
Using single quotes around your numbers is turning them into strings, and seems to get around
bigint
.