AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi runden bis auf 2 stellen hinterm komma, 0 nicht wegschneiden
Thema durchsuchen
Ansicht
Themen-Optionen

runden bis auf 2 stellen hinterm komma, 0 nicht wegschneiden

Ein Thema von agm65 · begonnen am 27. Sep 2007 · letzter Beitrag vom 23. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#1

runden bis auf 2 stellen hinterm komma, 0 nicht wegschneiden

  Alt 27. Sep 2007, 09:34
ich nochmal schnell.. ..

folgendes:

Delphi-Quellcode:
(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;
rundet diese zahl bis auf 2 stellen hinterm komma...wenn die zahl jetzt aber nach dem runden so aussieht: 1023.60
wird die 0 abgeschnitten wie kann ich das verhindern ?
euer Peter Porka
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 09:37
Hallo Peter,

das ist kein Rundungs- sondern ein Anzeigeproblem.

So geht es:

Format('%.2f', [1.60]); Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 09:38
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#4

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 09:50
sauber jungs das läuft !...ich bedanke mich !
euer Peter Porka
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#5

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 10:16
Hallo

Zusatzhinweis: Dein codebeispiel ist gefährlich! was glaubst du passiert, wenn man 32000 Stellen angibt ? Solltest du eventuell abfangen ...
Peter Schaible
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 14:17
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:
Runden ohne Ecken
Rundung - Wikipedia


Grüße

Frank
Frank
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 14:54
Hallo Frank,

Zitat von Sourcemaker:
... Du denkst auch daran das Round das sogenannte Bankers´s Rounding durchführt und nicht kaufmännisch rundet? ...
wer behauptet denn sowas? die FPU ist auf rmNearest eingestellt, was dem half-up mode entsprechen sollte.

Zitat von Sourcemaker:
... Mit Deiner Funktion gerundet ergibt 0,425 0,42 anstatt wie kaufmännisch zu erwarten 0,43 ...
Das Ergebnis ist 0.42 - aber nicht aufgrund eines Banker's Rounding:

Delphi-Quellcode:
var
  d: Double;
begin
  d := 0.425; // 0,424999999999999989
  ShowMessage(Format('%.18f', [d]));
end;
Hier liegt kein Rundungs- sondern ein Abbildungsproblem vor.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 15:34
Hallo Marabu,

das behauptet die Delphi-Hilfe.

Caption := FormatFloat('#0.0000',Round(0.425)); Und das ist der entsprechende Code der ausreichend formatiert seien dürfte.
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
Frank
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#9

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 16:34
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.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 27. Sep 2007, 16:39
Dafür können die Borländer nichts, da musst du dich schon bei Intel beschweren, die ihren x86er so gebaut haben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz