【问题标题】:How to preserve decimal places in PHP json encode?如何在 PHP json 编码中保留小数位?
【发布时间】:2019-04-04 04:55:27
【问题描述】:

有下面的代码。想要保留纬度的所有小数位,但 json_encode 会截断最后两位数。执行 json_encode 时如何保留所有小数位。我希望将值作为 json 输出中的数字,而不希望作为用引号括起来的字符串。

print_r(array('lat' => '-33.661853351608244' ));
echo json_encode( array('lat' => '-33.661853351608244' ),JSON_NUMERIC_CHECK);

输出:

Array
(
    [lat] => -33.661853351608244
)
{"lat":-33.661853351608}

【问题讨论】:

  • 浮点数的精度不足以保留所有这些小数位。
  • 可能和你的php版本有关?我在writephponline.com 上运行了你的代码,它按预期工作
  • @Amine 这可能取决于它是 32 位还是 64 位 PHP。
  • 那么他可能只需要将它们转换为字符串并在接收时将它们解析到他要使用数据的任何地方。

标签: php json


【解决方案1】:

您可以将精度设置为所需的小数位

ini_set( 'precision', 17 );
$arr = array(
  'lat' =>  "-33.661853351608244"
);

echo json_encode($arr,JSON_NUMERIC_CHECK);

输出:-

{"lat":-33.661853351608244}

【讨论】:

  • 抱歉延迟回复。如果我没有 ini_set 函数,它会返回相同的值。
【解决方案2】:

我遇到了 JSON_NUMERIC_CHECK 与电话号码以零开头的这种不一致。我通过在两个空链之间封装电话号码解决了这个问题:

$pre_tel = "0606060606";
$tel = " ".$pre_tel." ";

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多