首页 >后端开发 >php教程 >如何在 PHP 中优化未格式化的货币值?

如何在 PHP 中优化未格式化的货币值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-23 22:28:16629浏览

How to Refine Unformatted Money Values in PHP?

在 PHP 中精炼未格式化的货币值

在 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);
}

这个解决方案由几个组成步骤:

  • 清理:首先通过删除所有非数字字符来清理输入字符串。
  • 计数分隔符:然后计算清理后的小数分隔符(逗号或句点)的数量string.
  • 解析:使用正则表达式,删除分隔符,只留下字符串的数字部分。
  • 转换:最后,清理后的字符串将转换为浮点数。

此方法可确保未格式化的货币值无论区域特定的小数分隔符如何,都能正确解析。但是,请务必注意,它假设货币值的小数部分不超过两位数。

示例测试:

['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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn