![]() |
runden bis auf 2 stellen hinterm komma, 0 nicht wegschneiden
ich nochmal schnell.. :)..
folgendes:
Delphi-Quellcode:
rundet diese zahl bis auf 2 stellen hinterm komma...wenn die zahl jetzt aber nach dem runden so aussieht: 1023.60
(code von [url]http://forum.dsdt.info/[/url])
uses Math; function RundeAufStelle(zahl: double; stellen: integer): double; var multi: double; begin multi:=IntPower(10, stellen); zahl:=round(zahl*multi); result:=zahl/multi; end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:=FloatToStr(RundeAufStelle(1023.23483, 2)); end; wird die 0 abgeschnitten wie kann ich das verhindern ? |
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Hallo Peter,
das ist kein Rundungs- sondern ein Anzeigeproblem. So geht es:
Delphi-Quellcode:
Grüße vom marabu
Format('%.2f', [1.60]);
|
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
das du 0 abgeschnitten wird hat nichts mit dem runden zu tun sonder mit deiner wandlung zum String. FloatToStr zeigt eben so viele Stellen hinter dem Komma an bis eine 0 kommt. Wenn dir das nicht zusagt musst du die Ausgabe formatieren (zum Beispiel mit FormatFloat)
|
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
sauber jungs das läuft !...ich bedanke mich !
|
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Hallo
Zusatzhinweis: Dein codebeispiel ist gefährlich! was glaubst du passiert, wenn man 32000 Stellen angibt ? Solltest du eventuell abfangen ... |
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Hallo,
Du denkst auch daran das Round das sogenannte Bankers´s Rounding durchführt und nicht kaufmännisch rundet ? Beispiel: Mit Deiner Funktion gerundet ergibt 0,425 0,42 anstatt wie kaufmännisch zu erwarten 0,43. Links zu dem Thema: ![]() ![]() Grüße Frank |
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Hallo Frank,
Zitat:
Zitat:
Delphi-Quellcode:
Hier liegt kein Rundungs- sondern ein Abbildungsproblem vor.
var
d: Double; begin d := 0.425; // 0,424999999999999989 ShowMessage(Format('%.18f', [d])); end; Freundliche Grüße |
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Hallo Marabu,
das behauptet die Delphi-Hilfe.
Delphi-Quellcode:
Und das ist der entsprechende Code der ausreichend formatiert seien dürfte.
Caption := FormatFloat('#0.0000',Round(0.425));
Und da ich SetRoundMode nicht verändert habe dürfte zumindest in der Standardeinstellung von Delphi dieses Verhalten vorliegen. Alternative Standardfunktion ist Delphi´s SimpleRoundTo welches in der Delphi7 Version aber auch (wie in der Hilfe beschrieben) nicht kaufmännisch rundet sondern bei negativen Zahlen ein anderes Verhalten aufweist: 0,425 -> 0,43 -0,425 -> -0,42 Dagegen rechnet die gleiche Funktion in Delphi 2007: 0,425 -> 0,43 -0,425 -> -0,43 Schaut man sich den Quellcode in der Unit Math an sieht man die entsprechenden Unterschiede. Spaßiger weise haben das die Borländer allerdings die Hilfe nicht entsprechend angepaßt (zumindest in der SP1 nicht). Die genannten Links belegen übrigens das von mir beschrieben Verhalten. Grüße Frank |
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Dass die Borländer ein setsames Verhältnis zur Mathematik haben, sieht man schon bei Mod.
Hier kommt bei negativen Dividend ein negativer Rest raus und der auch noch Betragsmäßig falsch. |
Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
Dafür können die Borländer nichts, da musst du dich schon bei Intel beschweren, die ihren x86er so gebaut haben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 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