And*_*rew 21 php floating-point currency floating-accuracy money-format
我一直在胡扯如何处理PHP中的货币显示和数学,并且很长一段时间以来一直使用该DECIMAL类型将其存储在MySQL中,并使用money_format()格式化它以在网页上显示.但是,今天我看了一下实际的原型:
string money_format ( string $format , float $number )
Run Code Online (Sandbox Code Playgroud)
我现在有点困惑.所有我被告知的是,避免浮动钱!但这里是基本的格式化函数(比如快五倍),将输入转换为浮点数.number_format()做同样的事.
所以我的问题是:
除非我处理的是分数美分或数万亿美元(而且我都没有处理过),我是否应该关注显示和存储(但从不进行数学计算)货币被抛到浮点数?我是否会接近浮动点不准确的区域改变我的数字?
如果对#1的回答是我确实应该关注,那么为什么这样money_format()构建呢?
dan*_*n04 22
除非我处理的是分数美分或数万亿美元(而且我都没有处理过),我是否应该关注显示和存储(但从不进行数学计算)货币被抛到浮点数?我是否会接近浮动点不准确的区域改变我的数字?
对于纯舍入/显示目的,只要绝对浮点表示误差小于$ 0.005(因此舍入到最接近的分数是正确的),就是安全的.
使用IEEE 754单精度,您最高可达131,072.00美元.($ 131,072.01表示为131072.015625,错误地向上舍入.)
双精度(PHP float使用)直到$ 70,368,744,177,664.01(美分也有.015625)才会失败.你没有什么可担心的.
如果对#1的回答是我确实应该关注,那么为什么money_format()以这种方式构建?
它应该采用什么类型?PHP没有内置的十进制类型.许多其他语言也没有.