PHP处理用户友好的格式化价格到标准浮点数

时间:2011-07-25 15:38:45

标签: php floating-point usability currency number-formatting

我有一个表单,用户可以在其中输入商品的价格。理想情况下,我希望用户能够以任何最适合他们的方式添加价格,并且还为了可读性。然后我需要将其转换为标准浮点数,以便我的Web服务可以计算成本等。

我正在努力的部分是如何获取货币的初始sting / float / int并将其转换为浮动。

例如:

UK: 1,234.00
FRA: 1 234,00
RANDOM: 1234
RANDOM2: 1234.00

所有这些格式都略有不同。

我想将其存储为:

1234.00

然后我将结果存储在MySQL数据库中作为DECIMAL。

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:1)

假设您使用的是MySQL,使用DECIMAL或NUMERIC类型是用于存储货币的正确类型。

Float容易出现舍入误差,精度有限。

显示格式应由PHP处理。

如果存储在DB中,您当然应该存储货币代码 - 在检索时可以使用它来告诉PHP如何显示它

答案 1 :(得分:0)

你不能使用:

floatval($AnyVar)

答案 2 :(得分:0)

如果你想接受这么多不同的格式,那么要做到这一点有点棘手。

现在我们可以使用一个简单的正则表达式来获取值的小数和完整部分:

/^([0-9,. ]+?)(?:[.,](\d{1,2})$|$)/

正则表达式将捕获数字的小部分+小数部分,用a或a分隔。并且有一个或两个数字。

捕获组1将包含完整部分,第2组将包含小数部分(如果有)。

要获取您的号码,您只需要从完整部分中过滤掉所有非数字字符,然后将过滤后的完整和小数部分加在一起。

如果你想让它变得更加万无一失,你可能应该在客户端实现一些东西来引导用户以正确的格式输入值。