我有一个很大的数字[ 987654321999999 ],我想将它传递给jquery,但它返回大量的科学记数法[ 9.87654322E + 14 ]。如何在没有科学记数法的情况下将大数发送给jquery?
public function actionCalPrice()
{
$totalPrice = 987654321999999;
echo CJSON::encode($totalPrice);
}
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl('items/calPrice');?>",
data:{ajax:ajax},
dataType: "json",
success: function(data) {
alert(data);
}
});
答案 0 :(得分:1)
使用大整数时,最好使用字符串而不是整数。
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
答案 1 :(得分:0)
987654321999999是比PHP可以处理的更大的数字。 PHP_INT_MAX是2147483647所以它试图找到最接近的数字。但是,如果您将此数字存储在某个位置,则可以使用例如number_format
将其转换为字符串,这会奇怪地(我真的不知道如何)保留原始数字:
$totalPrice = 987654321999999;
$str = number_format($totalPrice, 0, ".", "");
echo $str;
如果你使用JSON.parse函数解析它,你将获得原始数字(因为JS有更大的数字)。
编辑:是的,当然,如果您正在运行64位操作系统(我也正在运行它并且我刚刚意识到它:D),INT的大小更大。但PHP无法以某种方式打印这些数字。
9999999999999999表现得很奇怪。 9999999999999999 === 10000000000000000
评估为真。
答案 2 :(得分:0)
谢谢大家,我用GNU Multiple Precision解决了我的问题。 Useful link
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));
}