AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Individuelles Auf und Abrunden der ersten Nachkommastelle
Thema durchsuchen
Ansicht
Themen-Optionen

Individuelles Auf und Abrunden der ersten Nachkommastelle

Ein Thema von Delphineuling2015 · begonnen am 23. Jan 2015 · letzter Beitrag vom 23. Jan 2015
Antwort Antwort
Delphineuling2015

Registriert seit: 22. Jan 2015
6 Beiträge
 
#1

Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 11:15
Hallo zusammen,

ich möchte einen Rechner nachbilden, der als Ergebnis immer nur eine 0 oder eine 5 als erste und einzige Nachkommastelle anzeigt.

Dies bedeutet, dass Zahlen:

1. mit einer 1 als Nachkommastelle auf 0 in der Nachkommastelle aberundet werden (Beispiel: 5,1 soll zu 5,0 oder 5 werden).

2. mit einer 2,3,4,5 und 6 auf 5 in der Nachkommastelle aufgerundet werden (Beispiel: 5,3 soll zu 5,5 werden).

3. mit einer 7,8 und 9 auf eine 0 in der Nachkommastelle abgerundet werden Beispiel: 5,8 soll zu 6,0 oder 6 werden).

Mir fällt leider keine Lösung ein, vielleicht hat ja jemand eine Idee, wie ich es in den nachstehenden Quellcode einbauen kann.

Vielen Dank vorab!!!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c, d, e : Real;
begin
  a := StrToFloat(Edit1.Text);
  b := StrToFloat(Edit2.Text);
  c := StrToFloat(Edit3.Text);
  d := (a * 0.0165) + (b * 0.11) ;
  e := (d / 100) * c ;
  Label1.Caption := FloatToStr(round(e * 10) / 10) +' Punkte';
  Label2.Visible := True

end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 11:23
Delphi-Quellcode:
function MyRound( v: Double): Double;
begin
  if Frac( v) < 0.2 then
    result = Trunc(v)
  else if Frac( v) < 0.7 then
    result := Trunc(v) + 0.5
  else
    result := trunc( v) + 1;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 11:53
Delphi-Quellcode:
Function DvRound (Number,Granularity : double) : double;
begin
  Result := Trunc(Number / Granularity + 0.5) * Granularity
end;

// Aufruf in deinem speziellen Fall (zur Zahl immer 0.1 hinzuaddieren)
DvRound (0.1 + 5.1, 0.5); => 5.0
DvRound (0.1 + 5.2, 0.5); => 5.5
...
DvRound (0.1 + 5.9, 0.5); => 6.0
... andere Möglichkeiten

DvRound (1.7123, 0.1); => 1.7
DvRound (1.7123, 0.01); => 1.71

DvRound (17.7123, 2); => 18
Die Funktion rundet also immer auf das nächste ganzahlige Vielfache der 'Granularity'.

Vermutlich gibt es dafür auch schon eine eingebaute Funktion...

Geändert von Dejan Vu (23. Jan 2015 um 11:56 Uhr)
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 12:23
Delphi-Quellcode:
function MyRound( v: Double): Double;
begin
  if Frac( v) < 0.2 then
    result = Trunc(v)
  else if Frac( v) < 0.7 then
    result := Trunc(v) + 0.5
  else
    result := trunc( v) + 1;
end;
Es ist noch anzumerken, dass das nur für positive Werte funktioniert.
-3,3 wird hier z.B. auf -2,5 gerundet und nicht auf -3,5.
Außerdem sollte man v vllt am Anfang noch auf eine Nachkommastelle runden.

Aber ich denke Delphineuling2015 wird das Prinzip verstanden haben .

Grüße
  Mit Zitat antworten Zitat
Delphineuling2015

Registriert seit: 22. Jan 2015
6 Beiträge
 
#5

AW: Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 13:02
Hallo zusammen,

erst mal vielen Dank an Euch alle, für die Unterstützung!!!

Da ich nach über 15 Jahren "Delphipause" quasi wieder blutiger Anfänger bin, der immer noch mit Version 4 arbeitet, ist der Groschen, wo mein errechneter Wert in euren Code zum Runden "übergeben" wird, leider noch nicht gefallen.

In meinem Quellcode ist "e" der errechnete Wert. "e" soll nun mit Eurer Funktion gerundet, und dann als
Label1.Caption := FloatToStr(e) +' Punkte';
wieder im Formular angezeigt werden. Ich finde in Eurem Beispiel aber keinen Bezug auf e.

Ihr würdet mir sehr helfen, wenn ihr Euren Code mal in meinen Code einbauen könntet.

Sorry für mein laienhaften Ausdruck, ich arbeite daran .
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 15:27
Label1.Caption := FloatToStr(MyRound(e)) +' Punkte';
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Delphineuling2015

Registriert seit: 22. Jan 2015
6 Beiträge
 
#7

AW: Individuelles Auf und Abrunden der ersten Nachkommastelle

  Alt 23. Jan 2015, 21:30
Label1.Caption := FloatToStr(MyRound(e)) +' Punkte';
Alles klar, jetzt hab ich es gerafft und verstehe auch die Zusammenhänge .

Vielen Dank!
  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 01:55 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