PHP에서 형식화되지 않은 화폐 값을 수정하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-23 22:28:16
원래의
542명이 탐색했습니다.

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.
  • Parse: 정규식을 사용하여 구분 기호를 제거하고 문자열의 숫자 부분만 남깁니다.
  • 변환: 마지막으로, 정리된 문자열은 부동 소수점 숫자로 변환됩니다.

이 접근 방식을 사용하면 형식화되지 않은 화폐 값이 로캘별 소수 구분 기호에 관계없이 올바르게 구문 분석됩니다. 그러나 금전적 가치의 소수 부분은 두 자리 이하라고 가정한다는 점에 유의하는 것이 중요합니다.

예시 테스트:

['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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿