2010-12-04 38 views
3

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

准确地说,当我在包含一个double值(不是指数形式)的json字符串上使用json_decode方法时,会发生问题。转换一个对象后的这个double值变成指数。

回答

1

假设数字仍然被写入时(而不是字符串)浮动,这是做的一种方式:

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

我不知道是否有一个更清洁的方式与否。但基本上这使用sprintf打印最多15个小数位,然后删除任何尾随的0.字符。 (当然,并不能保证所有的东西都能很好的跟随零点,就像你期望的那样。)

如果你只是想要一个固定大小,那么你可以调整15并删除rtrim

2

我有一个类似的问题,其中json_decode正在将最近的推特/推特ID转换为指数数字。

我解决它通过正在增加PHP的浮动精度,可以做不同的几种方法...

  • 发现在你的php.ini中precision值,并将其更改为precision = 20
  • 添加ini_set('precision', 20);到你的PHP应用程序
  • 添加php_value precision 20到您的应用程序的.htaccess或虚拟主机文件

否则,如果你没事甲肝ING您BIGINT转换为字符串,你有PHP 5.3+,你也可以通过一个标志,json_decode像这样:json_decode($json, true, 512, JSON_BIGINT_AS_STRING)

+0

事实上:`5.4.0 \t选项参数是added.` - 所以它是5.4+但精确的东西 - 这是一个好主意:) – LeonardChallis 2013-06-10 08:40:49

相关问题