NumberFormatter가 마이너스 부호로 음수 통화 값을 인쇄하도록하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1160860

문제

PHP를 사용하고 있습니다 숫자 포 포터 통화 값을 인쇄하는 클래스.

예 :

  $cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
  $cFormatter->formatCurrency(123, 'USD');
  $cFormatter->formatCurrency(123, 'BRL');
  $cFormatter->formatCurrency(123, 'GBP');

그것은 잘 작동하고 돌아옵니다 "$123.00", "R$123.00", "£123.00"각각 예상대로.

그러나 음수는 선행 마이너스 대신 "-"대신 괄호로 둘러싸인 "회계 스타일"으로 인쇄됩니다.

예 :

$cFormatter->formatCurrency(-456, 'USD');

보고 "($456.00)", 내가 원하지만 "-$456.00". 분명히 이것을하는 간단한 방법이 있습니까?

접두사와 PostFix를 다음과 같이 재정의하여 브래킷을 제거 할 수 있습니다.

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");

그러나 나는 통화 기호를 얻지 못한다 "-456.00".

negative_prefix 속성을 설정할 때 사용해야 할 통화 기호에 대한 탈출 코드가 있습니까?

편집하다: 내가 찾고있는 결과를 주면 다른 로케일을 설정하게되어 기쁩니다.

편집 2 : 보고 INTL 라이브러리 문서 (NumberFormatter를 구현하는 데 사용되는 라이브러리), 다음은 유망한 것으로 보였습니다.

¤ ( u00a4) : 접두사 또는 접미사 : 통화 부호가없고 통화 기호로 대체됩니다. 두 배가되면 국제 통화 기호로 대체됩니다. 3 배가 된 경우 통화 복수 이름 (예 : 미국 달러) 또는 "미국 달러"로 대체되었습니다. 패턴으로 존재하는 경우, 금전적 소수 분리기가 소수점 분리기 대신 사용됩니다.

하지만 이것은:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");

"-¤123"을 인쇄하므로 기쁨이 없습니다.

편집 3 : 답을 찾았다 고 생각합니다. 아래를 참조하십시오.

도움이 되었습니까?

해결책

나는 EN_US 로케일 행동을 내가 찾고있는 것에 대해 약간 덜 해킹하는 방법을 찾았습니다. getPattern () / setpattern () 기능.

$cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
$sPattern = $cFormatter->getPattern(); // returns "¤#,##0.00;(¤#,##0.00)";

$sMyPattern = "¤#,##0.00;-¤#,##0.00";
$cFormatter->setPattern($sMyPattern);
$cFormatter->formatCurrency(-456, 'USD');  // returns -$456.00

다른 팁

그렇게함으로써, 당신은 현지화의 요점을 망치고 있습니다. ¤은 달러 표시를 나타내고 패턴이 항상 숫자의 시작 부분에 표시를 넣는다 고 말하고 있기 때문에 모든 통화의 경우는 아닙니다. 괄호를 제거하고 싶다면 더 많은 것을 갈 것입니다.

$locale = 'en_US';    
$nf = new \NumberFormatter($locale, \NumberFormatter::CURRENCY); 
$nf->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $decimals);

$pattern = str_replace(array('(',')'),'',$nf->getPattern());
$nf->setPattern($pattern);

echo $nf->format($number);

단순히 당신은 할 수 있습니다

$cFormatter->setTextAttribute(NumberFormatter::PAD_BEFORE_PREFIX, '-$')."\n";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top