在 PHP 中精确解析货币值
解析不同格式的财务数据可能是一个挑战,特别是在考虑特定于区域设置的分隔符时。当尝试将金钱的字符串表示形式(例如“75,25 €”)转换为浮点值时,就会出现此问题。
虽然常见方法涉及在用点替换逗号后使用 parsefloat() ,在处理使用逗号作为小数点分隔符的语言环境时,它存在不足。为了解决这个限制,需要一个更全面的解决方案。
本地化感知解决方案
建议的解决方案通过依赖正则表达式来满足本地化感知的需求从输入字符串中提取数值。它有效地将逗号和点作为小数分隔符处理,无论区域设置如何,都保留正确的表示形式。
public function getAmount($money) { $cleanString = preg_replace('/([^0-9\.,])/i', '', $money); $onlyNumbersString = preg_replace('/([^0-9])/i', '', $money); $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1; $stringWithCommaOrDot = preg_replace('/([,\.])/', '', $cleanString, $separatorsCountToBeErased); $removedThousandSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/', '', $stringWithCommaOrDot); return (float) str_replace(',', '.', $removedThousandSeparator); }
测试解决方案
为了验证其有效性,该解决方案使用各种输入格式进行了测试,包括:
['1,10 USD', 1.10], ['1 000 000.00', 1000000.0], [' 000 000.21', 1000000.21], ['£1.10', 1.10], ['3 456 789', 123456789.0], ['3,456,789.12', 123456789.12], ['3 456 789,12', 123456789.12], ['1.10', 1.1], [',,,,.10', .1], ['1.000', 1000.0], ['1,000', 1000.0]
结果证明了该解决方案提取数据的能力无论输入格式如何,都可以准确地计算浮点值。
限制和来源
虽然该解决方案擅长处理各种语言环境,但它确实对小数有限制超过两位数。该代码库位于 https://github.com/mcuadros/currency- detector ,提供了解析不同语言环境中货币值的实用实现。
以上是如何在 PHP 中精确解析货币值:一种本地化感知方法?的详细内容。更多信息请关注PHP中文网其他相关文章!