PHP:如何自动防止json_encode舍入数?

时间:2015-06-09 07:50:44

标签: php json decimalformat

json_encode存在很大问题,它会自动对数字进行舍入,但每个数字都需要2个小数点。

PHP:

<?php
$numbers = [1.00,2.00];

foreach ($numbers as $i => $number) 
{
      $numbers[$i] = number_format($number, 2, '.', null);
}

echo json_encode($numbers,  JSON_NUMERIC_CHECK);
?>

输出: [1,2]

预期输出: [1.00,2.00]

如何防止每个数字自动四舍五入?

  

PS:不是一个字符串:)

3 个答案:

答案 0 :(得分:5)

听起来像是在寻找{5.6}中提供的JSON_PRESERVE_ZERO_FRACTION。在以前的版本中,您需要转换为字符串或将其吸收并接受当没有小数值时浮点数和整数相等。

$numbers = [1.00,2.00];

echo $res = json_encode($numbers,JSON_PRESERVE_ZERO_FRACTION);

答案 1 :(得分:1)

public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int, string> pageUrl)
    {
        StringBuilder result = new StringBuilder();
        for (int i = 1; i < pagingInfo.TotalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a");
            tag.MergeAttribute("href", pageUrl(i));
            tag.InnerHtml = i.ToString();
            if (i == pagingInfo.CurrentPage)
            {
                tag.AddCssClass("selected");
                tag.AddCssClass("btn-primary");

            }
            tag.AddCssClass("btn btn-default");
            result.Append(tag.ToString());
        }
        return MvcHtmlString.Create(result.ToString());
    }

此处您的号码已经丢失了&#34;十进制值&#34;。说真的,在这一行之后立即尝试$numbers = [1.00,2.00]; ,你也不会从中获得var_dump

浮点数和整数仅包含数值,格式不会以任何方式保留。它不是.00问题,它是计算中数值的基本事实。

如果你想保留格式,你需要一直使用字符串。

答案 2 :(得分:0)

您可以按照以下方式使用您的代码:

<?php
 $numbers = [1.00,2.00];

 foreach ($numbers as $i => $number) 
 {
    $numbers[$i] = number_format($number, 2, '.', null);
 }

  echo $res = json_encode($numbers); // ["1.00","2.00"]
  echo str_replace('"', '', $res); //[1.00,2.00]
 ?>

和您的预期输出:[1.00,2.00]是相同的。