【发布时间】:2022-01-05 02:52:53
【问题描述】:
正如标题所说,当我将数组放入http_build_query() 时,所有浮点类型最终都会丢失精度。例如:
$arr = ['test' => 22854.94878205978 ];
print_r($arr); // prints 22854.94878205978
print_r(http_build_query($arr)); // prints 22854.94878206
我不确定为什么。我在 PHP 文档中找不到任何会导致此问题的内容。我的主要关注点只是通过 PHP 使用 cURL 通过 POST 请求发送一些数据,即。
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($arr));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$result = curl_exec($ch);
既然我需要精确度,我该怎么办?为什么会这样?
【问题讨论】:
-
“既然我需要精度,我能做什么”...使用字符串
-
或者在你的系统中明确设置精度?
-
@mickmackusa 的变量是什么?也许我的谷歌搜索技能没有达到标准,但我还没有找到可以明确设置精度的地方?
-
如果您
ini_set()会发生什么?喜欢这里:stackoverflow.com/a/62996915/2943403 有什么变化吗?如果没有,请按照 Phil 的建议将浮点数转换为字符串。 -
@mickmackusa 谢谢。我已经尝试过了,但最终遇到了一个新问题。垃圾值最终被插入:即。
22854.94878205977800004084