PHP以指数形式输出数字
问题描述:
当我输出一些双变量时,它们使用fwrite以指数形式写入。我可以在PHP中设置一些默认值,每当变量显示(复制或存储)时,它总是以十进制格式发生?PHP以指数形式输出数字
准确地说,当我在包含一个double值(不是指数形式)的json字符串上使用json_decode方法时,会发生问题。转换一个对象后的这个double值变成指数。
答
假设数字仍然被写入时(而不是字符串)浮动,这是做的一种方式:
echo rtrim(sprintf("%0.15f", $x), "0.");
我不知道是否有一个更清洁的方式与否。但基本上这使用sprintf
打印最多15个小数位,然后删除任何尾随的0
或.
字符。 (当然,并不能保证所有的东西都能很好的跟随零点,就像你期望的那样。)
如果你只是想要一个固定大小,那么你可以调整15
并删除rtrim
。
答
我有一个类似的问题,其中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)
事实上:`5.4.0 \t选项参数是added.` - 所以它是5.4+但精确的东西 - 这是一个好主意:) – LeonardChallis 2013-06-10 08:40:49