Delphi에서 통화 데이터 유형을 어떻게 다른 통화로 다른 형식으로 표시할 수 있습니까?

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

  •  01-07-2019
  •  | 
  •  

문제

데이터베이스의 다양한 테이블에서 항목을 가져오는 Delphi 애플리케이션을 작성해야 하며, 항목마다 통화가 다릅니다.따라서 로드한 항목의 통화에 따라 모든 통화 데이터 유형($, 파운드, 유로 등)에 대해 서로 다른 소수 자릿수와 서로 다른 통화 문자를 표시해야 합니다.

거의 전역적으로, 즉 양식에 표시된 모든 통화 데이터에 대해 통화를 변경할 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

동일한 통화라도 다른 형식(예: 구분 기호)으로 값을 표시해야 할 수 있으므로 통화 대신 LOCALE을 값에만 연결하는 것이 좋습니다.
간단한 정수를 사용하여 LCID(로케일 ID)를 보유할 수 있습니다.
여기에서 목록을 확인하세요: http://msdn.microsoft.com/en-us/library/0h88fahh.aspx

그런 다음 값을 표시하려면 다음과 같이 사용하십시오.

function CurrFormatFromLCID(const AValue: Currency; const LCID: Integer = LOCALE_SYSTEM_DEFAULT): string;
var
  AFormatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(LCID, AFormatSettings);
  Result := CurrToStrF(AValue, ffCurrency, AFormatSettings.CurrencyDecimals, AFormatSettings);
end;

function USCurrFormat(const AValue: Currency): string;
begin
  Result := CurrFormatFromLCID(AValue, 1033); //1033 = US_LCID
end;

function FrenchCurrFormat(const AValue: Currency): string;
begin
  Result := CurrFormatFromLCID(AValue, 1036); //1036 = French_LCID
end;

procedure TestIt;
var
  val: Currency;
begin
  val:=1234.56;
  ShowMessage('US: ' + USCurrFormat(val));
  ShowMessage('FR: ' + FrenchCurrFormat(val));
  ShowMessage('GB: ' + CurrFormatFromLCID(val, 2057)); // 2057 = GB_LCID
  ShowMessage('def: ' + CurrFormatFromLCID(val));
end;

다른 팁

저는 SysUtils.CurrToStr(값:통화;var 형식 설정:TFormat설정):끈;

저는 TFormatSettings 배열을 설정했습니다. 각 위치는 애플리케이션이 지원하는 각 통화를 반영하도록 구성되었습니다.각 배열 위치에 대해 TFormat 설정의 다음 필드를 설정해야 합니다.통화 문자열, 통화 형식, NegCurrFormat, ThousandSeparator, DecimalSeparator 및 통화 Decimals.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top