json_decode and float values


json_decode and float values

一位朋友问我一个从网站获取值的简单代码,没问题。这个网站正在使用json API,再一次,没有问题。

但是,在分析结果后,我发现这些值都是错误的。

示例:

json上的值是846.51,但我的脚本返回844.71。

我当前的"代码":

$data = file_get_contents('https://blockchain.info/fr/ticker');
$json = json_decode($data);
print_r($json->{'USD'}->{'15m'});

所以,我搜索了一下,发现它可能是一个与x64处理器有关的php错误,不确定。

有什么解决办法吗?

所以!根据https://bugs.php.net/bug.php?id=50224

这是固定版本:

$data = file_get_contents('https://blockchain.info/fr/ticker');
$res = preg_replace( '/":('d+)/', '":"'1"', $data );
$json = json_decode($res);
print_r($json->{'EUR'}->{'15m'});

John Konolol的改进答案:如果值是以sci格式表示的浮动小数("2.038069541E9"),则正则表达式将不起作用。

Regex必须是:

preg_replace( '/":('d+'.*'d*E*e*'d*)/', '":"'1"', $data)

它会将所有数字转换为字符串,包括在Json中有效的浮点数(1.34)或sci格式的数字(1E3)。