警告:json_encode() 中出现严重错误

发布于 2024-10-30 06:32:35 字数 390 浏览 1 评论 0原文

<?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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

厌味 2024-11-06 06:32:36

这不仅仅是一个 JSON 问题。如果你放入

alert(1968401665333658496);

Firebug 控制台,你会得到 1968401665333658600

你可能达到了 JS 最大值。

这里有一个讨论:JavaScript 在不损失精度的情况下可以达到的最高整数值是多少?

It's not just a JSON issue. If you put

alert(1968401665333658496);

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?

留蓝 2024-11-06 06:32:36

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.

混浊又暗下来 2024-11-06 06:32:36

引用您的整数值并在客户端处理转换。

Quote your integer value and handle the conversion on the client.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文