首頁 > 後端開發 > php教程 > 如何在 PHP 中精確解析貨幣值:一種本地化感知方法?

如何在 PHP 中精確解析貨幣值:一種本地化感知方法?

Susan Sarandon
發布: 2024-11-13 17:11:02
原創
353 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板