Php对货币的计算精度为0.01美分

Php对货币的计算精度为0.01美分,php,Php,我正在用PHP为一个客户构建一个平台,这个客户需要计算,特别是分区,然后才能用钱完成。这些计算需要精确到0.01美分。将货币乘以10000并转换为整数,然后对这个数字进行计算,这是正确的方法吗?我建议您使用正确/实际的浮点数进行所有计算(不要转换或转换它们),您可以稍后使用2个十进制精度对其进行格式化 使用数字\u格式或圆形仅显示结果。并在计算中取绝对值,并测试它们是否在给定范围内。否则,乘以你喜欢的任何数字并转换为int,但要非常小心除法和舍入。当你说“非常小心”时,你的意思是在计算后总是检查

我正在用PHP为一个客户构建一个平台,这个客户需要计算,特别是分区,然后才能用钱完成。这些计算需要精确到0.01美分。将货币乘以10000并转换为整数,然后对这个数字进行计算,这是正确的方法吗?

我建议您使用正确/实际的浮点数进行所有计算(不要转换或转换它们),您可以稍后使用2个十进制精度对其进行格式化


使用数字\u格式圆形仅显示结果。

并在计算中取绝对值,并测试它们是否在给定范围内。否则,乘以你喜欢的任何数字并转换为int,但要非常小心除法和舍入。当你说“非常小心”时,你的意思是在计算后总是检查结果是否在给定范围内?如果是这样的话,这应该是什么范围?为什么这被否决了?这个问题是关于以0.01分的精度工作,我搜索了其他答案,他们没有详细说明任何低于1分的问题。我试图避免使用浮点数进行计算的问题-往往不可靠。你能详细说明它是如何不可靠的吗?如果您处理的是所有浮点数或“十进制/货币”,如果它来自db,并且变量都相同,那么在您的情况下,它应该足够可靠,可以达到0.01。@fedmich float不幸不可靠。有些数字不能准确地存储在浮点数中。PHP文档引用:
floor((0.1+0.7)*10)
作为一个示例,在大多数系统上,它将返回7而不是8。感谢Jim的解释,但它不应该是floatval((0.1+0.7)*10);准确地说,不管怎样,我理解你和他的意思。还是谢谢你;他只是需要非常小心。