PHP四舍五入我的数字


PHP rounding my numbers?

我正在执行一个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);