在 PHP 中解析财务数据时,通常需要将表示货币值的字符串转换为浮点数。为了实现这一点,一种常见的方法是将字符串中的逗号替换为句点,然后使用 floatval() 函数。但是,此方法依赖于固定的小数分隔符(句点),可能不适合使用逗号作为分隔符的区域设置。
以下代码中提供了处理两个小数分隔符的更强大的解决方案:
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]
以上是如何在 PHP 中优化未格式化的货币值?的详细内容。更多信息请关注PHP中文网其他相关文章!