php - 在 PHP 中处理货币值的最佳实践?

标签 php types decimal

我需要在 PHP 中加、乘和比较货币值,并且需要确保它精确到一美分。

一种方法是将所有内容存储在 float 中,在每次操作之前和之后使用round,并在比较相等时使用mind machine epsilon。相当麻烦恕我直言。

另一种方法是将整个数据存储为整数数据类型中的美分,并且记得在我使用数据库(mysql,我使用十进制数据类型)的任何时候来回转换。不优雅,还有很多错误陷阱,恕我直言。

另一种方法是发明我自己的“数据类型”,将所有值存储在字符串中(“34.12”)并创建我自己的数学替换函数。这些函数将在内部将值转换为整数,进行计算并再次将结果输出为字符串。非常复杂,恕我直言。

我的问题:在 PHP 中处理货币值的最佳实践是什么? 谢谢!

最佳答案

从 MySQL v5.0.3 开始,MySQL 的 DECIMAL 数据类型存储精确的十进制数,即不是不准确的浮点表示。

要在 PHP 中正确操作精度数字,请使用 arbitrary precision math functions .该库在内部操作文本字符串。

货币旨在存储为十进制数,您可以获得小于美分的货币单位。您应该只在显示数字时四舍五入任何值,而不是在操作或存储期间。

关于php - 在 PHP 中处理货币值的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819508/

相关文章:

types - Julia:如何从模块内部访问类型?

swift - 使用十进制数字键在字典中查找最近的键

java - 从十六进制转换为十进制时,为什么会出现 NumberFormatException?如何防止出现这种情况? - java

PHPDoc 内联 {@link}(和 Netbeans)

php - Symfony 5 如何存储氩气的盐?

php - imagick的getImageLength裁剪图像后无法正常工作

haskell - 如何派生此函数的类型 :

Haskell 整数和 Int 类型;转换不起作用