如何使用PHP中的精确十进制值进行json解码

时间:2017-11-21 10:31:34

标签: php json

我有一个类似

的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转换为十进制数具有相同值而不转换为指数的数组。

我该怎么做?

或者有没有其他方法可以将这些数字转换回十进制数?

3 个答案:

答案 0 :(得分:0)

首先将json数据存储在变量中,假设为$json 然后尝试这个

$result = preg_replace("/(\"\w+\":\s*?)(\d+\.?[^,\}]*\b)/imu",'$1"$2"',$json);
print_r($result);

答案 1 :(得分:0)

由于您使用的是PHP loosely typed language,因此您可以将浮点值存储为json中的字符串值:

{
    "a": "0.0000051",
    "b": "0.0000051",
    "c": "0.0000051",
    "d": "0.0000051"
}

在阅读你的json时,你可以使用下面的代码片段将字符串值转换为浮点数:

$a_float =  (float) $a;

因为你想将json转换为一个数组,该数组在十进制数中具有相同的值而不转换为指数表示法,我认为这是要走的路。

答案 2 :(得分:0)

让我们试试这个:

KafkaConsumer

用法

ListOffsetRequest

结果:

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;
        }
    }
}

演示:https://3v4l.org/PLNfU