PHP对象存储浮点数精度截断,配置precision=14仍无效问题咨询
问题解答
你遇到的小数截断问题与数值是否存储在对象中完全无关。
- 该现象本质是PHP的输出展示逻辑导致的,并非数值实际存储时被截断:PHP和JS的浮点数底层均采用IEEE 754双精度标准,相同计算逻辑下实际存储的数值完全一致,你看到的差异只是输出时的展示位数不同。
- 你配置的
ini_set("precision", 14)仅指定了常规输出的有效数字位数为14位,刚好对应你当前看到的截断长度。IEEE 754双精度浮点数需要17位十进制数才能完整无损展示,因此调整精度配置即可解决问题。
解决方案
- 常规输出场景(echo、var_dump、print_r等):修改配置为
ini_set('precision', 17),输出的浮点数就会和JS结果完全对齐。 - JSON序列化场景:PHP的
json_encode函数使用独立的serialize_precision配置控制数值精度,需要额外添加配置ini_set('serialize_precision', 17),避免JSON输出时的精度丢失。
你可以自行验证:在PHP中直接将对应浮点数和JS输出的完整值做相等判断,会返回布尔值true,即可证明实际存储值完全一致,仅展示环节存在截断。
内容的提问来源于stack exchange,提问作者uPrompt
相关产品推荐
相关产品推荐

