AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dividieren durch gebrochene Zahlen

Ein Thema von Coder · begonnen am 18. Jun 2007 · letzter Beitrag vom 19. Jun 2007
Antwort Antwort
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
206 Beiträge
 
Delphi 3 Professional
 
#1

Dividieren durch gebrochene Zahlen

  Alt 18. Jun 2007, 23:21
ich möchte gerne durch gebrochne Zahlen dividieren.

Bsp: 56654 / 35.456
= 1597,86

Ist der Algo so richtig?


Delphi-Quellcode:
function real_teilen(valueue1: real; value2: real): real;
var x, y, z: real;
begin
  x := value / value2;
  y := x * 100;
  z := int(trunc(y));
  z := z / 100;
  result := z;
end;
oder kann man den noch verbessern?
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#2

Re: Dividieren durch gebrochene Zahlen

  Alt 18. Jun 2007, 23:36
valueue1 würde ich noch durch value1 ersetzen

ich hätts so gemacht:
trunc((value1/ value2) * 100) / 100 als code also:

Delphi-Quellcode:
function real_teilen(value1: real; value2: real): real;
begin
  result := trunc((value1 / value2) * 100) / 100;
end;
Christian
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#3

Re: Dividieren durch gebrochene Zahlen

  Alt 18. Jun 2007, 23:43
außerdem kannst du zusammenfassen: (selber typ!)
function real_teilen(value1, value2: real): real;
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dividieren durch gebrochene Zahlen

  Alt 19. Jun 2007, 03:30
Du willst offenbar auf 2 Stellen nach dem Komma runden, was Geldwerte vermuten lässt. Dafür eignet sich der Typ Currency ganz gut, da er intern auf Ganzzahlen basiert, und somit die bei Gleitkommawerten unvermeidlichen Rundungsfehler umgeht.
Alternativ kannst du auch selber intern immer mit den Werten mal 100 rechnen, und dann mit Ganzzahltypen, und nur für die Ausgabe durch 100 teilen um das Komma zu erhalten (oder gar per Stringoperationen einfügen).
Gleitkomma geht auch, aber rechne nicht damit bei 2.95/1.59 nachher genau 1.85 zurück zu bekommen. Du wirst nämlich bereits bei deinen Eingangszahlen sowas wie 2.9499999994 und 1.5900000000021 im Speicher haben, und etwas wie 1.850000013 als Ergebnis. Das liegt an der prinzipiellen Funktionsweise von Floats, und ist mit trunc(x*100)/100 nicht abstellbar.
Merken wirst du das zwar erst, wenn du ein paar Millionen Mal irgendwelche Rechungen durchgeführt hast, aber ich halte es für wichtig diesen Umstand immer im Hinterkopf zu haben.

Bei Festkommawerten (Anzahl Stellen nach dem Komma fix) lohnt es sich eigentlich immer intern mit skalierten Ganzzahlen zu rechnen. Allein schon, weil Ganzzahlarithmetik schneller von statten geht.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#5

Re: Dividieren durch gebrochene Zahlen

  Alt 19. Jun 2007, 06:43
Hi
Wie wär's mit einer simplen z:=x/y - Lösung und zum Darstellen FormatFloat('#0.00',z); ? Rechenzeiten sollten an dieser Stelle glaub ich nicht unbedingt erwähnt werden....
Gruß oldmax
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:38 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