Php json_解码和浮点值
一位朋友问我一个简单的代码,从网站上获取值,没问题。 这个网站使用的是json API,同样,没有问题 但是,在解析结果之后,我发现值都错了 例如: json上的值是846.51,但我的脚本返回844.71 我当前的“代码”: 所以,我搜索了一下,发现它可能是一个与x64处理器相关的php错误,不确定Php json_解码和浮点值,php,json,floating-point,Php,Json,Floating Point,一位朋友问我一个简单的代码,从网站上获取值,没问题。 这个网站使用的是json API,同样,没有问题 但是,在解析结果之后,我发现值都错了 例如: json上的值是846.51,但我的脚本返回844.71 我当前的“代码”: 所以,我搜索了一下,发现它可能是一个与x64处理器相关的php错误,不确定 有什么解决办法吗?那么!据报道,这确实是一个php错误 以下是固定版本: $data = file_get_contents('https://blockchain.info/fr/ticker'
有什么解决办法吗?那么!据报道,这确实是一个php错误 以下是固定版本:
$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”),则正则表达式将不起作用 正则表达式必须是:
preg_replace( '/":(\d+\.*\d*E*e*\d*)/', '":"\1"', $data)
它会将所有数字转换为字符串,包括浮点数(1.34)或sci格式的数字(1E3),这在Json中是有效的。我在64x机器上,没有遇到这样的问题。你确定这是任何类型的错误,而不仅仅是更改数据或抓取错误的字段吗?“相关”列包含相关的问题,是的,我多次检查,json和json_解码的数字不一样,不知道为什么。json:“USD”:{“15m”:846.51,“last”:846.51,“buy”:842.03,“sell”:846.51,“symbol”:“$”}php:{“USD”:{“15m”:840.07,“last”:840.07,“buy”:840.04,“sell”:840.07,“symbol”:“$”}
preg_replace( '/":(\d+\.*\d*E*e*\d*)/', '":"\1"', $data)