我一直在讨论如何在PHP中处理货币显示和数学问题,很长一段时间以来,我一直在使用DECIMAL
类型将其存储在MySQL中,并使用money_format()
对其进行格式化以便在网页上显示。然而,今天我看了实际的原型:
string money_format ( string $format , float $number )
我现在有点困惑了。所有我被告知的是,为了钱,避免浮点!但在这里,它是基本的格式化函数(比方说快五倍),将输入转换为浮点数。number_format()
也做同样的事情。
所以我的问题是:
money_format()
是这样构建的?发布于 2011-01-12 09:54:21
除非我处理的是分数美分或数万亿美元(我正在处理这两种情况),否则我是否应该担心显示和存储(但从不计算)转换为浮点型的货币?我会接近浮点数不准确改变我的数字的区域吗?
对于纯粹的舍入/显示目的,只要浮点表示的绝对误差小于$0.005 (因此舍入到最接近的美分是正确的),您就是安全的。
使用IEEE 754单精度,您的安全最高可达131,072.00美元。(131,072.01美元表示为131072.015625,这是错误的四舍五入。)
Double precision (PHP的float
使用的)不会失败,直到$70,368,744,177,664.01 (它也有.015625作为美分)。你没什么好担心的。
如果对#1的回答是我确实应该关注,那么为什么money_format()是这样构建的呢?
它应该采用什么类型?PHP没有内置的decimal类型。许多其他语言也是如此。
https://stackoverflow.com/questions/4662138
复制相似问题