首页 > 后端开发 > php教程 > 如何在 PHP 中精确解析货币值:一种本地化感知方法?

如何在 PHP 中精确解析货币值:一种本地化感知方法?

Susan Sarandon
发布: 2024-11-13 17:11:02
原创
355 人浏览过

How to Parse Monetary Values with Precision in PHP: A Localization-Aware Approach?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板