![]() |
Individuelles Auf und Abrunden der ersten Nachkommastelle
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; |
AW: Individuelles Auf und Abrunden der ersten Nachkommastelle
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; |
AW: Individuelles Auf und Abrunden der ersten Nachkommastelle
Delphi-Quellcode:
Die Funktion rundet also immer auf das nächste ganzahlige Vielfache der 'Granularity'.
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 Vermutlich gibt es dafür auch schon eine eingebaute Funktion... |
AW: Individuelles Auf und Abrunden der ersten Nachkommastelle
Zitat:
-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 |
AW: Individuelles Auf und Abrunden der ersten Nachkommastelle
Hallo zusammen,
erst mal vielen Dank an Euch alle, für die Unterstützung!!!:thumb: Da ich nach über 15 Jahren "Delphipause" quasi wieder blutiger Anfänger bin, der immer noch mit Version 4 arbeitet:shock:, 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 :oops:. |
AW: Individuelles Auf und Abrunden der ersten Nachkommastelle
Label1.Caption := FloatToStr(MyRound(e)) +' Punkte';
|
AW: Individuelles Auf und Abrunden der ersten Nachkommastelle
Zitat:
Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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