2017-07-14 30 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