使用JSON_NUMERIC_CHECK在PHP中将字符串编码为json编号,而不会丢失预设

时间:2015-05-09 21:52:31

标签: php json floating-point

如果在32位系统(Windows7)中在PHP 5.3.10上运行此代码:

<?php

$object = new stdClass;
$object->flaotAsString = "8226347662.8374";

$json = json_encode($object, JSON_NUMERIC_CHECK);

var_dump($object);
var_dump($json);

输出结果为:

object(stdClass)[1]
  public 'flaotAsString' => string '8226347662.8374' (length=15)
string '{"flaotAsString":8226347662.84}' (length=31)

我希望json字符串中的数字与对象中的字符串相同(不会丢失预设)。

作为PHP的一个错误(我还没有确认),对于这个版本和平台我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

class stdClass#1 (1) {
  public $flaotAsString =>
  string(15) "8226347662.8374"
}
string(33) "{"flaotAsString":8226347662.8374}"

它适用于64位系统上的PHP 5.5。问题必须来自你的平台。如果你不能升级到64位架构,那么一个丑陋的解决方案就是使用字符串而不是int。

此问题已在此处讨论过 http://grokbase.com/t/php/php-bugs/11ankwwn3n/php-bug-bug-60111-new-json-numeric-check-option-mangles-certain-values