![]() |
Kaufmännische Runden geht nicht !
Hallo,
ich will Kaufmännische Runden auf 2 Nachkommastellen! Dafür habe ich folgendes Programm gebastelt:
Delphi-Quellcode:
Ergebnisse der Rundung die ich bekomme:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm3 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Button2: TButton; Edit3: TEdit; Edit4: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation {$R *.dfm} function RoundUp(X: double): double; begin Result := Trunc(X) + Trunc (Frac(X) * 2); end; function RoundX(const Value:double; const NK:Integer):double; var multi: double; begin multi := IntPower(10, NK); Result := RoundUp(Value*multi) / multi; end; procedure TForm3.Button1Click(Sender: TObject); var x: Double; begin x := StrToFloat(Edit1.Text); Edit2.Text := FloatToStr(RoundX(x, 2)); end; procedure TForm3.Button2Click(Sender: TObject); var Y: Double; begin Y:= StrToFloat(Edit3.Text); Edit4.Text:= FloatToStr(Round(Y)); end; end. 16,5556 --> 16,56 Ergebnis stimmt ! 16,56455 --> 16,56 was raus kommen sollte: 16,57 16,121313 --> 16,12 was raus kommen sollte: 16,13 Also wenn die Zahlen am Ende kleiner als 5 sind wird nicht aufgerundet! Was muss ich ändere damit ich das gewünschte Ergebnis bekomme? Liebe Grüße |
AW: Kaufmännische Runden geht nicht !
Sorry der Teil ist was Extra, sollte nicht dazu gehören:
Delphi-Quellcode:
procedure TForm3.Button2Click(Sender: TObject);
var Y: Double; begin Y:= StrToFloat(Edit3.Text); Edit4.Text:= FloatToStr(Round(Y)); end; |
AW: Kaufmännische Runden geht nicht !
Was Du willst, ist offenbar nicht "kaufmännisches Runden", sondern immer aufrunden?
Dann sollte Roundup so aussehen:
Delphi-Quellcode:
function RoundUp(X: double): double;
begin Result := Trunc(X); if Frac(X) <> 0 then Result := Result + 1; end; |
AW: Kaufmännische Runden geht nicht !
Hi,
für mich sieht das alles korrekt nach kaufmännischem Runden aus. Willst du vielleicht immer aufrunden? Bei welchem Zahlen sollte bei dir denn abgerundet werden? Viele Grüße, Frederic |
AW: Kaufmännische Runden geht nicht !
Ich will immer aufrunden, was im übrigen Kaufmännisch am besten ist !
Mach ja keine sinn sinn wenn ich 16,3211 auf 16,32 runde, da mache ich 0,0011 Cent Verlust ! |
AW: Kaufmännische Runden geht nicht !
|
AW: Kaufmännische Runden geht nicht !
Oh dachte das ist Arithmetisch Runden !
Kaufmännische ist dann wohl doch nicht so gut wenn ich Preise berechnen will ;-) |
AW: Kaufmännische Runden geht nicht !
Vielleicht tut es das:
Delphi-Quellcode:
kein_bankers_round := ceil(value * 100)/100;
![]() Grüße Klaus |
AW: Kaufmännische Runden geht nicht !
Danke mit der Funktion geht es ;-)
Delphi-Quellcode:
function RoundUp(X: double): double;
begin Result := Trunc(X); if Frac(X) <> 0 then Result := Result + 1; |
AW: Kaufmännische Runden geht nicht !
Zitat:
|
AW: Kaufmännische Runden geht nicht !
Zitat:
|
AW: Kaufmännische Runden geht nicht !
Hallo,
es gab vor etwa einem Jahr mal nen Thread dazu, nachdem keine der Funktionen so richtig funktioniert hatte, habe ich mir was eigenes gebaut, was auf String-Handling basiert, also mit Nullen auf 3 Kommastellen auffüllen, 3. Stelle nach Null prüfen, wenn >=5 aufrunden, sonst abrunden ... Danach das Komma entfernen und ich habe sofort meine EuroCent als Integer. Heiko |
AW: Kaufmännische Runden geht nicht !
Zitat:
![]() Die Lösung für dein Rundungsproblem heißt 'Round'. Und wenn man gaanz genau sein will, addiert man noch 0.5x die geforderte Genauigkeit hinzu, bevor man rundet. Mit Fließkommazahlen und Runden zu arbeiten, ist total simpel. Man muss einfach nur einmal verstehen, was dahinter steckt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz