将大量数据从PHP发送到jquery,而不需要科学标记


send a large number from php to jquery without scientific notation

我有一个大数[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));
}