<?php
ini_set('display_errors','1');
error_reporting(E_ALL);
include_once 'dbConnect.php';
if (connect()){
global $conn;
$queryProduct = "SELECT group_concat(candName) FROM testFacRep";
$productResult = $conn->query($queryProduct);
$productResult = mysqli_fetch_row($productResult);
$data = $productResult[0];
$cipher = explode(",", $data);
function product($carry, $item){
$carry *= $item;
return $carry;
}
}
echo json_encode (number_format(array_reduce($cipher, "product", 1), 0, '.', ''));
?>
测试值为:66300, 170254, 175133, 8226, 82793
我使用在线计算器来了解产品是否正确。正确的产品是1346359888376293931758800。
但是,PHP提供的产品是1346359888376294113542144。
我在这里做错了什么?
答案 0 :(得分:0)
你超过2 ^ 31,开始变得有点不稳定;不要担心你是第一个遇到这个问题的人。
PHP附带了一个名为GMP
的简洁小库使用gmp_mul我们可以获得您需要的值。
$ints = array(66300,170254,175133,8226,82793);
$output = 1;
foreach($ints as $i){
$output = gmp_mul($output,$i);
}
print_r($output);
输出:GMP Object ( [num] => 1346359888376293931758800 )
3v4l link
答案 1 :(得分:0)
你所面临的问题在integers的php文档中得到解释:&#34;整数的大小取决于平台,尽管最大值约为20亿是通常的值(& #39; s 32位签名)。 64位平台的最大值通常约为9E18,除了PHP之前的Windows,它总是32位。 PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE确定,最大值使用自PHP 5.0.5起的常量PHP_INT_MAX,使用自PHP 7.0.0起使用常量PHP_INT_MIN的最小值。&#34;
您还可以使用bc_math lib:
<?php
$res = 1;
foreach ([66300, 170254, 175133, 8226, 82793] as $op) {
$res = bcmul($res, $op);
}
echo $res; //1346359888376293931758800