我有一个大数[987654321999999],我想把它传递给jquery,但它返回的大数与科学符号[9.87654322E+14]。如果没有科学符号,我如何发送大量的数字给jquery ?
PHP函数
public function actionCalPrice()
{
$totalPrice = 987654321999999;
echo CJSON::encode($totalPrice);
}
在JQuery $.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl('items/calPrice');?>",
data:{ajax:ajax},
dataType: "json",
success: function(data) {
alert(data);
}
});
当处理大整数时,最好使用字符串而不是整数。
public function actionCalPrice()
{
$totalPrice = "987654321999999";
echo CJSON::encode($totalPrice);
}
或者,如果你不能在数字查找sprintf上加上引号,以获得额外的格式
public function actionCalPrice()
{
$totalPrice = 987654321999999;
echo CJSON::encode(rtrim(sprintf('%.20F', $totalPrice),'0'));
}
但是你的Javascript在32位操作系统/应用程序上会有不同的表现。
你想要的Javascript输出是什么?
此外,如果您的$totalPrice实际上是一个变量而不是常量,例如从其他变量计算价格,我建议查看PHP的bcmath。http://php.net/manual/en/book.bc.php
987654321999999是PHP无法处理的大数字。PHP_INT_MAX是2147483647,所以它会尝试找到最接近的数字。然而,如果你有这个数字存储在某个地方,你可以将其转换为字符串使用例如number_format
神奇地(我真的不知道如何)保持原始数字:
$totalPrice = 987654321999999;
$str = number_format($totalPrice, 0, ".", "");
echo $str;
如果你用JSON解析它。解析函数,你将得到原始的数字(因为JS有更大的数字)。
编辑:是的,当然,如果你运行的是64位操作系统(我也在运行它,我刚刚意识到:D), INT的大小更大。但是PHP无法打印这些数字。
9999999999999999的行为真的很奇怪。9999999999999999 === 10000000000000000
求值为true
谢谢大家,我用GNU Multiple Precision解决了我的问题。有用的链接
public function actionCalPrice()
{
$criteria = new CDbCriteria;
$criteria->select='id,type_id,col1,col2,col3';
$item = Items::model()->findByPk($opItem,$criteria);
$totalPrice = gmp_add($totalPrice, $item->col2);
echo CJSON::encode(gmp_strval($totalPrice));
}