问题描述
我的应用程序从另一个应用程序接收到JSON请求,该请求的最大浮点数为18位。现在,当我尝试解码JSON请求数据时,数字大于12的浮点值会四舍五入为最大12位,但是我的应用程序需要处理该请求并以与该值相同的精度处理浮点数。验证请求的真实性。
{
"value2": 12.2256,"value": 18.4446359017678
}
将JSON_DECODE转换为
array("value" => 18.444635901768,"value2" => 12.2256)
。 请告知,因为我已经使用过ini_set('precision'18),但是它将所有浮点数转换为18位数字。 谢谢
解决方法
欢迎使用StackOverFlow
如果您只想将精度设置为16或更高,则应将精度ini设置为16。但是请注意,如果将指定精度设置为大于16且您的浮点数小于17,则php确保将您的浮点数转换为17位数字。例如:
ini_set('precision',17);
$json = '{"value":16.1}';
$json = json_decode($json,true);
var_dump($json['value']); // value convert from float(16.1) to float(16.100000000000001)
此问题的最佳解决方案是通过将-1置于precision ini来禁用precision:
ini_set('precision',-1);
$json = '{"value":18.4446359017678}';
$json = json_decode($json,true);
var_dump($json['value']); // float(18.4446359017678)
但是还有另一个简单的解决方案,它将浮点数类型转换为字符串。当您的数字类型为字符串时,将禁用用于浮点数的php进程:
$json = '{"value":"18.4446359017678"}';
$json = json_decode($json,true);
var_dump($json['value']); // string(16) "18.4446359017678"