我有一个类似 json 字符串
{
"a":0.0000051,
"b":0.0000051,
"c":0.0000051,
"d":0.0000051
}
当我尝试将其解码为json_decode($json, true)
它将所有值转换为其指数数时
array(4){
["a"]=> float(5.1E-6)
["b"]=> float(5.1E-6)
["c"]=> float(5.1E-6)
["d"]=> float(5.1E-6)
}
我想将 json 转换为十进制数具有相同值的数组,而无需转换为指数。
我该怎么做?
或者有没有其他方法可以将这些数字转换回十进制数?
首先只是将json数据存储在一个变量中,假设$json
然后试试这个
$result = preg_replace("/("w+":s*?)(d+.?[^,}]*b)/imu",'$1"$2"',$json);
print_r($result);
由于您使用的是 PHP(一种松散类型的语言(,因此您可以将浮点值存储为 JSON 中的字符串值:
{
"a": "0.0000051",
"b": "0.0000051",
"c": "0.0000051",
"d": "0.0000051"
}
读取 json 时,您可以使用下面的代码片段将字符串值转换为浮点数:
$a_float = (float) $a;
因为您想将 json 转换为具有相同十进制数值的数组而不转换为指数表示法,所以我认为这是要走的路。
让我们试试这个:
function float_to_string($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[$key] = float_to_string($value);
}
return $data;
} else {
if (is_float($data)) {
$result = rtrim(number_format($data, 14), '0.');
return $result === '' ? '0' : $result;
} else {
return $data;
}
}
}
用法
$json = '{
"a":0.0000051,
"b":0.00000051,
"c":0.000000051,
"d":0.0000000000051
}';
$data = json_decode($json, true);
$data = float_to_string($data);
print_r($data);
结果:
Array
(
[a] => 0.0000051
[b] => 0.00000051
[c] => 0.000000051
[d] => 0.0000000000051
)
演示:https://3v4l.org/PLNfU