php的数字精度如何扩展它

标签 php javascript floating-point precision

在 JavaScript 中,此数学运算返回:

1913397 / 13.054 =  146575.53240386088 

但 php 中的相同操作返回:

1913397 / 13.054 =  146575.53240386

我猜这是由于四舍五入造成的。

如何扩展 php 的精度?

最佳答案

来自an article I wrote for Authorize.Net :

一加一等于二,对吗? 0.2 加 1.4 乘以 10 怎么样?这等于 16,对吗?如果您使用 PHP(或大多数其他编程语言)进行数学计算,则不然:

echo floor((0.2 + 1.4) * 10); // Should be 16. But it's 15!

这是由于 float 的内部处理方式造成的。它们以固定的小数位数表示,并且可能会导致数字加起来与您预期的不太一样。在内部,我们的 .2 加 1.4 乘以 10 示例计算得出大约 15.9999999998 左右。当处理不需要像百分比这样精确的数字时,这种数学方法很好。但是,在处理资金问题时,精确性很重要,因为这里或那里丢失的一分钱或一美元很快就会加起来,没有人喜欢遭受任何丢失资金的亏空。

BC 数学解决方案

幸运的是 PHP 提供了 BC Math extension这是“对于任意精度的数学,PHP 提供了二进制计算器,它支持任何大小和精度的数字,以字符串表示。”换句话说,您可以使用此扩展对货币值进行精确的数学计算。 BC Math extension contains function允许您精确执行最常见的操作,包括 addition , subtraction , multiplication ,和 division .

更好的例子

这是与上面相同的示例,但使用 bcadd() 函数为我们进行数学计算。它需要三个参数。前两个是我们希望添加的值,第三个是我们希望精确到的小数位数。由于我们使用的是金钱,因此我们将精度设置为小数点后两位。

echo floor(bcadd('0.2', '1.4', 2) * 10); // It's 16 like we would expect it to be.

关于php的数字精度如何扩展它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622580/

相关文章:

php - Travis CI 只执行单个测试文件 phpunit

PHP获取url内容然后将表中的元素解析为JSON

php - 580001 无效请求 : {0} PayPal (PHP)

javascript - 修复从 excel 导出的 html 表中的行

javascript - OnChange 处理程序 ReactJS?

javascript - 单击按钮时自动聚焦到输入(适用于 AMP 文章)

mysql - 在mysql中存储金额

php - 如何将这些信息转换为查询?

c++ - 有没有办法检查变量是否为整数? C++

lisp - LISP中 float 的神秘问题——时间轴生成