【问题标题】:Incrementing values larger than 2147483647 in PHP在 PHP 中增加大于 2147483647 的值
【发布时间】:2014-07-21 14:35:15
【问题描述】:

基本上,我正在开发一个特定模块中的卡片管理系统,该模块负责创建连续的批量卡片。这些卡有 19 位长,因为这些卡有货币价值,我需要存储整个卡的价值。奇怪的是,系统在管理 VISA 卡号递增时没有任何问题,而且这些卡号长度为 16 位。我假设最后 3 位数字是破坏功能的原因,但我不知道如何处理这个问题,因为我以前从未处理过如此大的值。

$seqArray = array();
for($i = $_POST['startcardnumber']; $i <= $_POST['endcardnumber']; $i++) {
    $i = sprintf('%0.0f',$i);
    if(strlen($i) < $count) { $i = str_pad($i, $count, '0', STR_PAD_LEFT); }
    array_push($seqArray, $i);
}

非常感谢任何帮助。

感谢 Fluffeh,我发现 BC 数学函数正是我所需要的。下面是我用来计算和增加卡号的新 for 循环。

$seqArray = array();
for($s = $_POST['startcardnumber'], $e = $_POST['endcardnumber'];bccomp($s,$e) != 1; $s = bcadd($s, 1)) {
    if(strlen($s) < $count) { $s = str_pad($s, $count, '0', STR_PAD_LEFT); }
    array_push($seqArray, $s);
}

【问题讨论】:

  • 查看BC Math 函数。这些可以处理大整数(PHP 默认使用 32 位整数 - 正如您所发现的那样最大)。

标签: php increment


【解决方案1】:

BC Math 库使用起来可能有点乏味,但它可以轻松处理您需要的数值。

缺点是您不能按预期使用简单的事物运算符:

例如,addition 如下完成 - 使用 bcadd() 函数:

<?php

$a = '1.234';
$b = '5';

echo bcadd($a, $b);     // 6
echo bcadd($a, $b, 4);  // 6.2340

?>

【讨论】:

  • 非常感谢 Fluffeh 先生!这正是我所需要的,并且运行良好。将在我的帖子中使用确切的 for 循环功能进行编辑,以防将来它可以帮助任何人。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2012-06-18
相关资源
最近更新 更多