json_decode和float值

时间:2013-11-23 22:25:56

标签: php json floating-point

一位朋友问我一个简单的代码来从网站上获取值,没问题。 这个网站再次使用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 bug,不确定。

解决此问题的任何解决方法?

2 个答案:

答案 0 :(得分:1)

所以!根据{{​​3}}

,这确实是一个php bug

这是固定版本:

$data = file_get_contents('https://blockchain.info/fr/ticker');
$res = preg_replace( '/":(\d+)/', '":"\1"', $data );
$json = json_decode($res);

print_r($json->{'EUR'}->{'15m'});

答案 1 :(得分:0)

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

正则表达式必须是:

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

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