PHP以指数形式输出数字

时间:2010-12-04 22:38:15

标签: php transformation exponential

当我输出一些双变量时,它们是用fwrite以指数形式写的。我可以在PHP中设置一些默认值,无论何时显示(复制或存储)变量,它总是以十进制格式发生吗?

准确地说,当我在包含double值(不是指数形式)的json字符串上使用json_decode方法时会出现问题。转换对象后的双倍值变为指数。

2 个答案:

答案 0 :(得分:3)

假设数字在写入时仍然是浮点数(而不是字符串),这是一种方法:

echo rtrim(sprintf("%0.15f", $x), "0.");

我不确定是否有更清洁的方式。但基本上这会使用sprintf打印最多15个小数位,然后删除任何尾随的0.个字符。 (当然,并不能保证一切都会像你期望的那样用尾随零完美地舍入。)

如果您只想要固定尺寸,则可以调整15并移除rtrim

答案 1 :(得分:3)

我遇到了类似的问题,其中json_decode将最近的推特/推文ID转换为指数数字。

我通过提高PHP的浮点精度来解决它,这可以用不同的方式来完成......

  • 在php.ini中找到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)