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); }
このソリューションはいくつかの要素で構成されています手順:
このアプローチにより、次のことが保証されます。フォーマットされていない通貨値は、ロケール固有の小数点記号に関係なく、正しく解析されます。ただし、金額の小数部分が 2 桁以下であると想定していることに注意することが重要です。
テスト例:
['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 中国語 Web サイトの他の関連記事を参照してください。