当我输出一些双变量时,它们是用fwrite以指数形式写的。我可以在PHP中设置一些默认值,无论何时显示(复制或存储)变量,它总是以十进制格式发生吗?
准确地说,当我在包含double值(不是指数形式)的json字符串上使用json_decode方法时会出现问题。转换对象后的双倍值变为指数。
答案 0 :(得分:3)
假设数字在写入时仍然是浮点数(而不是字符串),这是一种方法:
echo rtrim(sprintf("%0.15f", $x), "0.");
我不确定是否有更清洁的方式。但基本上这会使用sprintf
打印最多15个小数位,然后删除任何尾随的0
或.
个字符。 (当然,并不能保证一切都会像你期望的那样用尾随零完美地舍入。)
如果您只想要固定尺寸,则可以调整15
并移除rtrim
。
答案 1 :(得分:3)
我遇到了类似的问题,其中json_decode
将最近的推特/推文ID转换为指数数字。
我通过提高PHP的浮点精度来解决它,这可以用不同的方式来完成......
precision
值并将其更改为precision = 20
ini_set('precision', 20);
添加到您的PHP应用php_value precision 20
添加到您应用的.htaccess或虚拟主机文件否则,如果您将BIGINT
转换为字符串并且您拥有PHP 5.3+就可以了,您也可以将标记传递给json_decode
,如下所示:json_decode($json, true, 512, JSON_BIGINT_AS_STRING)