警告:json_encode() 中出现严重错误
<?php
$int = 1968401665333658496;
echo json_encode( array("$int",$int) );
?>
在浏览器中收到: [ "1968401665333658496" , 1968401665333658600 ]
它“四舍五入”我的整数吗?
顺便说一句:PHP_INT_MAX = 9223372036854775807 ~ PHP 版本 5.3.2-1ubuntu4.7
在任何地方(PHP、MySQL 或 Javascript)使用这些大整数都没有问题
- 直到 json_encode() 把它搞砸了(顺便说一句,默默地..)
<?php
$int = 1968401665333658496;
echo json_encode( array("$int",$int) );
?>
Recieved in browser: [ "1968401665333658496" , 1968401665333658600 ]
It "rounds off" my integer?
Btw : PHP_INT_MAX = 9223372036854775807 ~ PHP Version 5.3.2-1ubuntu4.7
No problems with these huge integers anywhere (PHP, MySQL or Javascript)
- until json_encode(
) screws it up (silently btw..)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这不仅仅是一个 JSON 问题。如果你放入
Firebug 控制台,你会得到
1968401665333658600
你可能达到了 JS 最大值。
这里有一个讨论:JavaScript 在不损失精度的情况下可以达到的最高整数值是多少?
It's not just a JSON issue. If you put
in firebug console you get
1968401665333658600
You're probably hitting the JS max value.
There's a discussion on that here : What is JavaScript's highest integer value that a Number can go to without losing precision?
Javascript 没有整数的概念,根据标准,所有数字都是 IEEE 双精度数,这意味着它们有 52 位尾数。在任何精度损失之前,这会导致实际最大“整数”值为
2^53
。我不确定你如何在 JS 中没有遇到这么大的数字问题 - 如果你没有,你的 JS 实现就不符合标准。
Javascript has no concept of integers, according to the standard all numbers are IEEE doubles, which means they have 52 bits of mantissa. this leads to a practical maximum "integer" value of
2^53
before any loss of precision.I am not sure how you didn't have problems with numbers this large in JS alone - if you didn't your JS implementation is not standards compliant.
引用您的整数值并在客户端处理转换。
Quote your integer value and handle the conversion on the client.