ホームページ > バックエンド開発 > 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]
ログイン後にコピー

結果は、入力形式に関係なく、浮動小数点値を正確に抽出するソリューションの機能を示しています。

制限事項とSource

このソリューションはさまざまなロケールの処理に優れていますが、2 桁を超える小数に関しては制限があります。コードベースは https://github.com/mcuadros/currency-detector で入手でき、さまざまなロケールで通貨値を解析するための実用的な実装を提供します。

以上がPHP で金額を正確に解析する方法: ローカリゼーションを意識したアプローチ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート