【发布时间】:2011-06-07 10:08:32
【问题描述】:
我一直在琢磨如何在 PHP 中处理货币显示和数学运算,长期以来一直使用DECIMAL 类型将其存储在 MySQL 中,并使用money_format() 对其进行格式化以显示在网页。然而,今天我看了一下实际的原型:
string money_format ( string $format , float $number )
我现在有点困惑。我被告知的是,避免为了钱而花车!但这里是基本的格式化函数(比如说快五倍),将输入转换为浮点数。 number_format() 也一样。
所以我的问题是:
除非我正在处理小数美分或数万亿美元(而且我都没有处理),否则我是否应该关心显示和存储 em>(但从不计算)被转换为浮点数的货币?我是否会接近浮点不准确性改变我的数字的领域?
如果#1 的答案是我确实应该担心,那么为什么
money_format()会这样构建?
【问题讨论】:
-
大部分 int->float 转换的危险来自于对这些浮点数进行数学运算。
number_format()只是进行“漂亮打印”类型转换,因此浮动化过程创建的任何奇怪的重复小数都不太可能影响结果。 -
PHP 并不是“最佳实践”的缩影。
-
@OP 我刚刚注意到你说正在存储。请不要将钱存为花车。使用某种固定精度。
-
我没有,我将它们存储在 MySQL
DECIMAL字段中,该字段不是浮点字段。我的考虑是,假设我有 $i,并将其转换为浮点数(通过手动转换或number_format()的输出或其他方式),然后将其存储在数据库中。它将被存储为DECIMAL,所以我并不担心,所以我承认我的说法有点奇怪。我更担心通过在系统周围将其转换为浮动来对其进行哪些更改。也就是说,我把它拿出来,我把它转换成float,我把它存回去……会不会不一样?
标签: php floating-point currency floating-accuracy money-format