4

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

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

4

2 回答 2

4

我有一个类似的问题,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)

于 2011-11-12T17:11:56.420 回答
3

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

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

我不确定是否有更清洁的方法。但基本上这用于sprintf打印最多 15 位小数,然后修剪掉任何尾随0.字符。(当然,不能保证所有内容都会像您期望的那样用尾随零很好地四舍五入。)

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

于 2010-12-04T22:45:50.827 回答