Delphi'yi Round gibi Excel'e almaya çalışıyorum ama yapamam. Ben 54321.245 olarak ayarlanır döviz değişkeni kullanıyorum ve ne zaman o Bankacılar Yuvarlama kullanarak yuvarlar bu değişkeni biçimlendirmekDelphi Para Birimi, her zaman Excel gibi Round'a nasıl dönüşür?
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;
: İşte kodudur. Ancak, aynı değeri bir değişmez olarak biçimlendirdiğimde, Excel'in yuvarladığı yolu yuvarlar.
Bu, bir para birimi değişkeni mi, yoksa bir değişmez değer mi oluşturduğunu $ 54,321.25'a çevirmeyi bekliyordum. Delphi'nin her zaman Excel ile aynı şekilde yuvarlanmasını nasıl sağlayabilirim?
Sadece Delphi çemberleri farklı yolları göstermek için değişmezleri kullanıyorum
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
Düzen. Gerçek koddaki değişkenleri kullanmayı umuyorum.
Not: Ben uzatıldıiçin para biriminden değişkeni değiştirirseniz
doğru yuvarlar
Bazı ben yok olduğunu ileri sürmüşlerdir
Gereksinimlerimi net bir şekilde anladım, bu kesinlikle doğru değil. İhtiyaçlarımı çok net bir şekilde anladım, açıkçası onları açıklamak için çok iyi bir iş yapıyorum. İstediğim yuvarlama yöntemi iki ondalık basamaktır. Dizin bölümünün binths değeri olduğunda> = 0.005 0,01'e yuvarlanmasını istiyorum, Delphi tarafından sunulan para birimi türü bunu yapmaz. Bu örnekte Microsoft SQL kullanarak bir para veri türü (Delphi'nin para birimi ile aynı olduğunu varsaydım) ve SQL'i tarif ettiğim şekilde parayla çevirmeyi denedim.
- SQL Para> = 0,005 = 0,01
- Delphi Para> = 0.005: = 0,00
Düzenleme 3.
İyi Makale: http://rvelthuis.de/articles/articles-floats.html
Olası Çözüm: http://rvelthuis.de/programs/decimals.html
Edit # 4
İşte Embarcadero tartışmadan çözümlerden biridir
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;
Excel tüm API'leri ve özellikleri boyunca yuvarlama% 100 tutarlı olduğundan emin misiniz? –
@Warren - Hayır% 100 emin değilim. Finansal uygulamalar satıyorum ve numaraların Excel'in ortaya koyduğu ile eşleştiğinden emin olmalıyım. –
Bu soruyu doğru bir şekilde cevaplamak için, gerçekten ne tür bir yuvarlama beklediğinizi bize söylemeniz gerekir. –