如何在PHP中安全地执行与金钱相关的计算?

Sha*_*obe 12 php finance

我正在研究一些报告输出脚本,需要对一些货币值进行一些基本的计算.

我知道浮点运算的局限性,但输入值都是十进制格式,所以如果我使用算术运算符,PHP会将它们转换为浮点数.

那么处理这些数字的最佳方法是什么?我应该使用BCMath吗?是否有类似于.NET中的Decimal的东西?或者如果我强制转换为int,使用算术运算符是否安全?

nic*_*ckf 13

不要以美元(1.54美元)工作,以美分工作:(154c).除非你需要执行几分之一重要的任务,否则你将使用整数,一切都很好.如果你对十分之一的利息感兴趣,那么只需将所有东西乘以十!

  • 泛化:使用适合您货币的原子单位. (9认同)
  • 我在这个解决方案中发现的一个问题是在处理税收或折扣时.你仍然需要乘以浮点数.在使用整数时,您将如何解决这个问题? (9认同)
  • 肖恩:不,重点是你不应该使用浮点数,不管编程语言如何.他们是不精确的. (6认同)

Rob*_*t K 10

如果使用BCMath,所有值都将存储在字符串中并作为字符串传递给函数,就像结果将是一个字符串一样.因此,您不需要进行任何转换,但要确保为函数指定的数字是值数值.就个人而言,如果数学需要小数侧的高精度,那么使用BCMath.