PHP的数字精度如何扩展它
php's digit precision how to extend it
在 JavaScript 中,这个数学运算返回:
1913397 / 13.054 = 146575.53240386088
但是 PHP 中的相同操作返回:
1913397 / 13.054 = 146575.53240386
我想这是由于四舍五入。
如何扩展 php 的精度?
来自我为 Authorize.Net 写的一篇文章:
一加一等于二,对吧?.2加1.4乘以10怎么样?这等于16,对吧?如果您使用 PHP(或大多数其他编程语言(进行数学运算,则不会:
echo floor((0.2 + 1.4) * 10); // Should be 16. But it's 15!
这是由于浮点数在内部的处理方式。它们用固定的小数位数表示,并可能导致数字加起来不像您期望的那样。在内部,我们的 .2 加上 1.4 乘以 10 示例计算出大约 15.9999999998 左右。在处理不必像百分比这样的精确数字时,这种数学很好。但是,当处理金钱时,精确很重要,因为这里或那里缺少一分钱或一美元会迅速增加,没有人喜欢在任何丢失的钱中处于短端。
BC 数学解决方案
幸运的是,PHP提供了BC Math扩展,这是"对于任意精度数学,PHP提供了二进制计算器,它支持任何大小和精度的数字,表示为字符串。换句话说,您可以使用此扩展程序对货币值进行精确的数学运算。BC Math 扩展包含允许您精确执行最常见运算的函数,包括加法、减法、乘法和除法。
一个更好的例子
这是与上面相同的示例,但使用 bcadd(( 函数为我们进行数学运算。它需要三个参数。前两个是我们希望添加的值,第三个是我们希望精确到的小数位数。由于我们正在处理资金,因此我们将精度设置为两个小数点。
echo floor(bcadd('0.2', '1.4', 2) * 10); // It's 16 like we would expect it to be.
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 扩展移相器按钮类不工作
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- TableExport jquery插件:文件名和扩展名问题
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- Javascript”;类“;带有参数的扩展
- Chrome扩展:让扩展编辑其web_accessible_resources
- 如何通过在两个节点之间拖放来制作边缘,并在细胞空间中扩展 egdehandle 扩展.js
- 主干:混合事件从扩展视图扩展
- 使用地图时使用扩展运算符扩展数组
- 嵌套对象的 JQuery 扩展 - 在扩展上设置 props 也会更改原始扩展对象
- (无域)>扩展名::name从何而来
- 当模块使用“扩展”时扩展模块;module.exports”;
- jQuery $.fn.扩展或$.扩展使用
- Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中