PHP舍入我的数字?

时间:2016-09-16 08:55:11

标签: php json rounding

我正在进行API调用,该调用正在JSON

中输出

产品字段为"ProductID":3468490060026049912

我转换为PHP,json_decode()

然后输出"Product ID" = float(3.4684900600261E+18)

它变为浮动的圆形,我把这个数字输入MYSQL并保持圆形数字。

如何在没有舍入的情况下将JSON转换为PHP,我需要将其更正为19位?

4 个答案:

答案 0 :(得分:1)

您可以使用JSON_BIGINT_AS_STRING flag int he $options parameter of json_decode。不过,你会有一个字符串。

答案 1 :(得分:1)

您可能不需要将这些ID存储为整数;它不像你要对它们做任何数学。

将它们存储为字符串,无论它们有多少位数,您都不会有任何精度问题。

您需要将这些存储为整数的唯一原因是,如果您将它们用作数据库中的主ID字段,并且它会为新记录执行自动增量。

这也是处理电话号码,邮政编码和格式化为数字但实际上只是任意序列的其他数据的存储的正确方法。

答案 2 :(得分:0)

该值太大,无法在32位计算机上存储为integer(最大值约为2 * 10 9 ),这就是PHP将其转换为浮。

在64位机器上,PHP可以存储为整数,但其值非常接近极限(约为9 * 10 18 )。另一个以9开头或者长一位数的ID不合适,并由PHP转换为浮动。

但是浮点数字丢失了最低有效数字。

作为一种快速解决方法,您可以将JSON_BIGINT_AS_STRING作为第四个参数传递给json_decode(),但它并不能解决问题的根源。您可能会在Javascript或数据库代码上遇到同样的问题。

你最好制作" ProductID"到处都是字符串。无论如何,它是一个标识符。你不需要用它做数学运算,只是存储它并搜索它。

答案 3 :(得分:-1)

修复了顶部设置ini_set('precision',19);的问题。