这让我有点发疯,直到我终于找到此错误,该错误将您指向此RFC,其中说
当前
json_enpre()使用设置为14的EG(精度)。这意味着最多使用14位数字来显示(打印)该数字。IEEE 754
double支持更高的精度,并且
serialize()/
var_export()使用默认设置为17的PG(serialize_precision)更加精确。由于
json_enpre()使用EG(precision),因此
json_enpre()即使PHP的float可以持有更精确的float值,也除去了小数部分并破坏了原始值。
和(强调我的)
该RFC建议引入一个新设置EG(precision)=-1和PG(serialize_precision)=-1,该设置使用zend_dtoa()的模式0,该模式使用更好的算法对舍入浮点数进行取整(-1用于指示0模式)。
简而言之,有一种使PHP 7.1
json_enpre使用新的和改进的精度引擎的新方法。在 php.ini中,
您需要更改
serialize_precision为
serialize_precision = -1
您可以验证它是否可以在此命令行下使用
php -r '$price = ["price" => round("45.99", 2)]; echo json_enpre($price);'你应该得到
{"price":45.99}


