当前位置: 首页 > 面试题库 >

PHP-浮点数精度

雍阳
2023-03-14
问题内容

$a = ‘35’;
$b = ‘-34.99’;
echo ($a + $b);

结果为0.009999999999998

这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。

为什么PHP不返回预期的0.01?


问题答案:

因为浮点运算!=实数运算。对于一些浮子ab,由不精确性引起的差异的说明是(a+b)-b != a。这适用于使用浮点数的任何语言。

由于浮点数是具有有限精度的二进制数,因此存在有限数量的可表示数,这会导致精度问题]和类似的意外情况。这是另一篇有趣的读物:每位计算机科学家都应了解的浮点运算法则]。

回到您的问题,基本上没有办法用二进制准确地表示34.99或0.01(就像十进制一样,1/3 = 0.3333
…),因此使用了近似值。要解决此问题,您可以:

  1. 使用round($result, 2)的结果是四舍五入到小数点后2位。

  2. 使用整数。如果那是货币,以美元为单位,则将35.00美元存储为3500,将34.99美元存储为3499,然后将结果除以100。

遗憾的是,PHP没有其他语言那样具有十进制数据类型。



 类似资料:
  • 本文向大家介绍Fortran 浮点数精度,包括了Fortran 浮点数精度的使用技巧和注意事项,需要的朋友参考一下 示例 类型的浮点数real不能有任何实数值。它们可以表示实数,最多可以包含一定数量的十进制数字。 FORTRAN 77保证了两种浮点类型,而最新的标准则至少保证了两种实数类型。实变量可以声明为 x这是默认类型的实数,并且y是比更大的十进制精度的实数x。在Fortran 2008中,十

  • 问题内容: 我从数据库中得到一个数字,这个数字可能是或。 我需要将数字的小数精度设置为,这会使数字不超过(关于小数)或。 使用PHP 我看到一个问题: 四舍五入数字。我需要一个仅将小数点缩短而不改变其值的函数,而这些值似乎不遵循。 问题答案: 您可以用来实现以下目的: 这将转换为。 但是,如果您只想将小数位数缩短到3,而 不是 四舍五入,则可以执行以下操作: 乍一看可能令人生畏,但是这个概念确实很

  • 我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?

  • 问题内容: 我正在读取一个带有浮点数的文本文件,这些数字都带有1或2个小数点。我正在使用将线转换为浮点数,并在失败的情况下引发。我将所有花车存储在列表中。打印时,我想将其打印为2个小数位的浮点数。 假设我有一个文本文件,其编号为-3,65、9,17、1。我阅读了每个文件,然后将它们转换为float并将它们附加到列表中。现在在Python 2中,调用return 。但是在Python 3中,-3.6

  • 在我的计算机科学课程中,我们正在研究浮点数以及它们在内存中是如何表示的。我已经理解了它们在内存中是如何表示的(尾数/有效数、指数及其偏差、符号位),我也理解了浮点是如何相互添加和减去的(反规格化和所有那些有趣的东西)。然而,在翻阅一些学习问题时,我注意到一些我无法解释的东西。 当一个不能精确表示的浮点数加到自己身上几次时,答案比我们在数学上预期的要低,但当同一个浮点数乘以一个整数时,答案就精确地得