【黄啊码】PHP7 json_encode()导致浮点数精度丢失的解决办法

在php7中,

json_encode()
函数可能会导致浮点数精度丢失的问题。本文将详细探讨解决这一问题的几种方法,并展示如何通过设置
serialize_precision
来控制浮点数的精度。

serialize_precision
是一个PHP配置指令,它决定了浮点数在序列化时的存储精度。其适用范围为PHP_INI_ALL,默认值为100。

通过设置

serialize_precision
为一个合适的值,可以确保浮点数在序列化和反序列化时的精度。我尝试了以下设置:

ini_set('serialize_precision', 16);

结果显示为:

立即学习“PHP免费学习笔记(深入)”;

有网友指出,使用默认值-1是绝对错误的!以下是官方文档的一个示例:

输出结果:

float(10)
10.00000000000001
110
10.00000000000001

此外,还有其他解决方法:

方法1:强制转换为字符串以保证精度

request['param']['feeAmount'] = (string)request['param']['feeAmount'];

注意:使用这种方法时,必须注意对接的接口是否有变量类型要求。

方法2:使用

number_format
函数格式化数字

number_format(number, decimals, decimalpoint, separator)

参数说明:

  • number
    :要格式化的数字。
  • decimals
    :保留的小数位数。
  • decimalpoint
    :用作小数点的字符串。
  • separator
    :用作千位分隔符的字符串。

通过以上方法,您可以有效解决PHP7中

json_encode()
函数导致的浮点数精度丢失问题。