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