首頁 >後端開發 >php教程 >如何在 PHP 中最佳化未格式化的貨幣值?

如何在 PHP 中最佳化未格式化的貨幣值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-23 22:28:16591瀏覽

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