我正在执行一个API调用,该调用将在JSON
、中输出
产品字段为"ProductID":3468490060026049912
我转换为PHP,json_decode()
然后我输出"Product ID" = float(3.4684900600261E+18)
它变成了一个四舍五入的浮点,我把这个数字输入到MYSQL中,它保持为四舍五进的数字。
如何在不取整的情况下从JSON转换为PHP,我需要将其更正为19位数字?
您可以在JSON_decode的$options参数中使用JSON_BIGINT_AS_STRING标志。不过,你会有一根绳子。
您可能不需要将这些ID存储为整数;你不会对它们做任何数学运算。
将它们存储为字符串,无论它们有多少位数,精度都不会有任何问题。
您需要将这些存储为整数的唯一原因是,如果您将它们用作数据库中的主ID字段,并为新记录进行自动递增。
这也是处理电话号码、邮政编码和其他数据存储的正确方法,这些数据被格式化为数字,但实际上只是一个任意序列。
该值太大,无法在32位机器上作为整数存储(最大值约为2*109(,这就是PHP将其转换为浮点值的原因。
在64位机器上,PHP可以存储为整数,但其值确实接近极限(大约为9*1018(。另一个以9
开头或长一位数的ID不合适,PHP将其转换为浮点。
但浮点数会丢失最低有效位数。
作为一个快速的解决方法,您可以将JSON_BIGINT_AS_STRING
作为第四个参数传递给json_decode()
,但它并不能解决问题的根源。您可能会在Javascript或数据库代码中遇到同样的问题。
你最好让"ProductID"到处都是字符串。无论如何,它是一个标识符。您不需要对它进行数学运算,只需存储并搜索即可。
固定在顶部设置ini_set('precision',19);
。