首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果在浮点型中处理货币很糟糕,那么money_format()为什么要这样做呢?

如果在浮点型中处理货币很糟糕,那么money_format()为什么要这样做呢?
EN

Stack Overflow用户
提问于 2011-01-12 04:15:47
回答 1查看 9.5K关注 0票数 22

我一直在讨论如何在PHP中处理货币显示和数学问题,很长一段时间以来,我一直在使用DECIMAL类型将其存储在MySQL中,并使用money_format()对其进行格式化以便在网页上显示。然而,今天我看了实际的原型:

代码语言:javascript
复制
string money_format ( string $format , float $number )

我现在有点困惑了。所有我被告知的是,为了钱,避免浮点!但在这里,它是基本的格式化函数(比方说快五倍),将输入转换为浮点数。number_format()也做同样的事情。

所以我的问题是:

  1. ,除非我处理的是分数美分或数万亿美元(我正在处理这两种情况),否则我是否应该担心显示和存储(但永远不会计算)转换为浮点型的货币?我会接近浮点误差改变我的数字的领域吗?
  2. 如果对#1的答案是我确实应该关注,那么为什么money_format()是这样构建的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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类型。许多其他语言也是如此。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4662138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档