델파이를 엑셀처럼 라운드로 만들려고하고 있지만 할 수 없습니다. 내가 54321.245로 설정되어 통화 변수를 사용하고 있습니다 때 나는 그것이 은행 반올림을 사용하여 반올림이 변수의 형식을Delphi 통화 유형을 Excel과 같은 원형으로 항상 얻으려면 어떻게해야합니까?
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
c : currency;
begin
c := 54321.245;
s := '';
s := s + Format('Variable: %m',[c]);
s := s + chr(13);
s := s + Format(' Literal: %m',[54321.245]);
ShowMessage(s);
end;
: 여기에 코드입니다. 그러나 리터럴과 동일한 값을 포맷하면 Excel이 반올림하는 방식이 반올림됩니다.
나는 통화 변수 또는 리터럴 값을 형성하는지에 관계없이 $ 54,321.25으로 반올림 할 것으로 예상했다. Delphi가 매번 Excel과 같은 방식으로 반올림되도록하려면 어떻게해야합니까?
난 단지 델파이 마는 여러 가지 방법을 보여 리터럴을 사용하고
The rounding I expect to see is as follows:
54,321.245 = 54,321.25
54,321.2449 = 54,321.24
54,431.2499 = 54,421.25
편집. 나는 실제 코드에서 변수를 사용할 것으로 기대한다.
참고 : 나는을 확장에 통화에서 변수를 변경하면
가 제대로 라운드
일부는 내가이없는 것을 제안했다
내 요구 사항에 대한 명확한 이해는 절대적으로 사실이 아닙니다. 나는 나의 요구 사항에 대한 아주 명확한 이해를 가지고있다. 나는 분명히 그것들을 설명하는 훌륭한 일을하지 않는다. 내가 원하는 반올림 방법은 소수 둘째 자리입니다. deimal 부분의 1000 번째 값이 0.005 이상일 때 0.01로 반올림하고 싶습니다. Delphi에서 제공하는 통화 유형이 이것을 수행하지 않습니다. 필자는 또한 델파이의 통화와 같다고 가정 한 돈 데이터 유형으로 Microsoft SQL을 사용하여이 예제를 시도했으며 SQL은 내가 설명한 방식으로 돈을 버립니다.
- SQL 돈> = 0.005 = 0.01
- 델파이 환율> = 0.005 = 0.00
편집 # 3
좋은 기사 : http://rvelthuis.de/articles/articles-floats.html
가능한 해결 방법 : http://rvelthuis.de/programs/decimals.html
편집 # 4
다음은 엠바 카데로 토론의 솔루션 중 하나입니다
function RoundCurrency(const Value: Currency): Currency;
var
V64: Int64 absolute Result;
Decimals: Integer;
begin
Result := Value;
Decimals := V64 mod 100;
Dec(V64, Decimals);
case Decimals of
-99 .. -50 : Dec(V64, 100);
50 .. 99 : Inc(V64, 100);
end;
end;
당신은 엑셀의 모든 API와 기능을 통해 반올림에서 100 % 일치하는지 확인 있습니까? –
@Warren - 아니요, 100 % 확실하지 않습니다. 금융 응용 프로그램을 판매하며 Excel에서 제시 한 수치와 일치하는지 확인해야합니다. –
이 질문에 올바로 대답하려면 실제로 어떤 종류의 반올림을해야하는지 알려줄 필요가 있습니다. –