我继承了在MySQL数据库之上用PHP编写的大量旧代码。我注意到的是该应用程序doubles
用于存储和处理数据。
现在,我遇到了许多帖子,提到double
由于四舍五入的错误,它们不适合货币操作。但是,对于如何在PHP代码中处理货币值并将其存储在MySQL数据库中,我尚未找到完整的解决方案。
在专门用PHP处理资金时,是否有最佳实践?
我正在寻找的东西是:
- 数据应如何存储在数据库中?列类型?尺寸?
- 正常的加,减数据应如何处理。乘法还是除法?
- 我应该什么时候取整值?舍入多少舍入(如果有)?
- 处理大货币值和低货币值之间有区别吗?
注意: 一个非常简化的示例代码,说明了我在日常生活中可能会遇到的货币价值(为简化起见,忽略了各种安全问题。当然,在现实生活中,我永远不会像这样使用我的代码):
$a= $_POST['price_in_dollars']; //-->(ex: 25.06) will be read as a string should it be cast to double?
$b= $_POST['discount_rate'];//-->(ex: 0.35) value will always be less than 1
$valueToBeStored= $a * $b; //--> any hint here is welcomed
$valueFromDatabase= $row['price']; //--> price column in database could be double, decimal,...etc.
$priceToPrint=$valueFromDatabase * 0.25; //again cast needed or not?
我希望您使用此示例代码作为提出更多用例的手段,而不是从字面上看。
额外的问题 如果我要使用诸如Doctrine或PROPEL之类的ORM,那么在我的代码中使用金钱有何不同。
decimal
C#中的类型精度有限,但非常适合货币价值。