在PHP中将整数加到浮点数会将浮点数四舍五入到1个小数位。

5

For example, I have this line of code:

echo 10359023529 + 0.2137582935;

为什么会返回以下结果而不是10359023529.2137582935?

1
有一个或多个php.ini设置规定要打印多少位数字,我不确定是哪些。 - erisco
3个回答

5
使用:bcadd()函数。
echo bcadd(10359023529, 0.2137582935, 10);

3
这是浮点数值的限制。浮点数值以系数和指数的形式存储。小数有很高的精度,而大数则精度较低。这里提供比您想要的更详细的信息:http://en.wikipedia.org/wiki/IEEE_754-2008 总之:大数将非常不精确。尽量使用小数范围。
以下是关于PHP中浮点数精度的更多信息:http://php.net/manual/en/language.types.float.php 如果您真的需要高精度和大数字,请看BC math(http://www.php.net/manual/en/ref.bc.php)和GMP(http://www.php.net/manual/en/ref.gmp.php)。

1

php.ini 中有一种不常用的选项,它定义了打印浮点数时要显示多少个有效数字。在我的情况下,它如下所示:

; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 14

当然,这仅涉及格式,而不是浮点数固有的不精确事实。根据 IEEE 754,双精度的精度为15.95个十进制数字。

输出精度不是问题;浮点数据类型只有那么精确。 - user229044
原则上你是对的,但在这种特殊情况下,他没有超出双精度。 - Adam Byrtek
@Adam 我相信他确实这样做了;否则,他的实现将被特别设置为在输出浮点数时仅显示一位小数,因为默认值为14。 - user229044
有趣的是,我的命令行 PHP 默认显示 10359023529.214(精度为14)。 - Adam Byrtek
@Adam 那么我猜测你的平台比James的具有更高精度的浮点数。 - user229044
我不这么认为,双精度的精度正好由IEEE 754标准定义为15.95个十进制数字。 - Adam Byrtek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接