Cru*_*aft 32 php types decimal
我需要在PHP中添加,乘以和比较货币值,并且需要确保它精确到一分钱.
一种方法是将所有东西存储在浮点数中,在每次操作之前和之后使用回合,并在比较相等时使用思维机器epsilon.相当笨重的imho.
另一种方法是将整个事物存储为整数数据类型中的分数,另外还记得在我使用数据库的任何时候来回转换(mysql,我使用的是十进制数据类型).imho,Inelegant,以及许多错误陷阱.
另一种方法是发明我自己的"数据类型",将所有值存储在字符串("34.12")中并创建我自己的数学替换函数.这些函数会在内部将值转换为整数,进行计算并再次输出结果字符串.非常复杂,imho.
我的问题:在PHP中使用货币值的最佳做法是什么?谢谢!
2016 年更新:
我绝对不建议再将“钱”存储为整数。唯一正确的答案是Andrew Dunn的:使用Mysql的DECIMAL类型并将php的bc_*函数封装在Currency类中。
为了完整起见,我将在这里保留过时的答案
您应该始终使用整数。将值作为整数存储在数据库中,使用整数进行计算,并且当且仅当您想要打印它时,将其转换为某种可读格式。
这样你就可以完全规避浮点问题,这通常是处理金钱时的一个大问题;)
编辑:值得一提的一件事:在开始以这种方式工作之前,您需要考虑精度。正如其他人指出的那样,您可能需要使用小于一分的值,因此您需要相应地进行乘法/除法。(即货币 * 1000,精度为 0.001)
我自己回答一下.最佳做法是创建"金额"类.此类在内部将金额存储为整数美分,并提供getter,setter,数学函数,如加,减和比较.更清洁.
归档时间: |
|
查看次数: |
15258 次 |
最近记录: |