2017-07-14 50 views
0

There was我的问题(最初并不那么准确制定):PHP:格式漂浮在json_encode()给定精度功能

我需要使用PHP漂浮在JSON字符串。代码:

$obj['val'] = '6.40'; 
json_encode($obj); 

转换为:

{"val": "6.40"} 

这是确定的 - 我在PHP字符串值 '6.40' 和我有JSON字符串值 “6.40”。

的情况并没有那么好,如果我需要使用花车:

$obj['val'] = 6.40; 
json_encode($obj); 

转换为:

{"val": 6.4000000000000004} 

,但我需要:

{"val": 6.40} 

我怎么能转换给定精度的PHP在'json_encode'中浮动到JSON数字?

+0

你明白了什么,当你解码'{ “VAL”:6.4000000000000004}'另一方面(JavaScript或任何它是)? – axiac

+0

这应该有所帮助:https://stackoverflow.com/questions/20670114/what-is-the-exact-equivalent-of-js-something-tofixed-in-php –

+0

[每个计算机科学家应该了解的浮点数] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – Barmar

回答

0

...这是我自己的答案:

<?php 
$obj['val'] = 6.40; 
$out = json_encode($obj); 
echo $out; // {"val":6.4} 

ini_set('precision', 17); 
$obj['val'] = 6.40; 
$out = json_encode($obj); 
echo $out; // {"val":6.4000000000000004} 

ini_set('precision', 2); 
$obj['val'] = 6.40; 
$out = json_encode($obj); 
echo $out; // {"val":6.4} 

这是样品@axiac:

ini_set('precision', 4); 
$obj['val'] = 1/3; 
$out = json_encode($obj); 
echo $out; // {"val":0.3333} 
+1

你试图让'1/3'等于'0.333333333',事实上,任何人都知道,无论在小数点后面有多少'3',它仍然只是**近似值**和**不完全**'1/3'。 **没有办法**将'6.04'完全表示为一个浮点数。你所得到的只是一个近似值,你的“解决方案”所做的一切就是忽略比浮点数表示更多的数字。最后,当JSON解码时,您将再次获得“6.4000000000000004”,因为这是浮点表示可以获得的最接近于“6.4”的值。 – axiac