Seite 1 von 1
Round() - kann das jemand so brauchen wie es ist?
Verfasst: 12.12.2004 05:12
von Kaeru Gaman
die funktion Round(Zahl.f,Modus)
finde ich persönlich völlig nutzlos.
weil ich angeben muss, ob sie auf oder abgerundet werden soll.
wenn ich 11.8 abrunden will, nehme ich INT()
und wiese sollte ich 3.2 auf 4 aufrunden?
ich vermisse allerdings eine funktion, mit der ich ganz normal runden kann,
also abhängig vom wert auf oder ab.
aus 13.2 wird 13 (integer, nicht float) aus 21.7 wird 22
wie seht ihr das?
eine funktion Round(Zahl.f) die ab kommafünf aufrundet und sonst ab, fände ich nützlicher.
Re: Round() - kann das jemand so brauchen wie es ist?
Verfasst: 12.12.2004 09:23
von horst
Kaeru Gaman hat geschrieben:eine funktion Round(Zahl.f) die ab kommafünf aufrundet und sonst ab, fände ich nützlicher.
Es gibt nun mal 3 Möglichkeiten zu runden, und außerdem noch die Anzahl Kommastellen.
z.B. kaufmännisch auf Null Stellen
runde 10.6 ergibt 11
runde 10.4 ergibt 10
z.B. kaufmännisch auf 2 Stellen
runde 10.126 ergibt 10.13
runde 10.124 ergibt 10.12
Also die Rundungsfunktion müsste eigentlich so sein:
Round(Wert,Kommastellen,Modus)
Modus 0:ab, 5:kaufmännisch, 9:auf
Kaufmännisch auf Null Stellen geht derweil mit Round(Wert+0.5,0)
Verfasst: 12.12.2004 11:57
von Kaeru Gaman
Code: Alles auswählen
a.f = -1.3
b.f = -1.8
Debug Round(a+0.5,0)
Debug Round(b+0.5,0)
das soll mal einer ahnen, dass es mit +0.5 auch im negativen bereich richtig funktioniert.
kann man das nicht mit in die beschreibung schreiben?
wenn ich jetzt nicht hätte gegenargumentieren wollen, dann hätte ich es niemals überprüft.
unter diesem gesichtspunkt kann ich es vielleicht auch mal brauchen...
wäre halt nur angenehm gewesen, wenn ich das irgentwie erfahren hätte,
bevor ich das in meinen projekten mit INT() und nem IF für negative
gelöst habe...
aber ich würde trotzdem gern ne round-funktion haben,
die ohne weitere argumente kaufmännisch ohne nachkomma rundet...
die idee von horst ist auch nicht übel. allerdings würde ich das als zusätzliche lösung vorziehen, nicht als einzige.
PS: und ja, ausgerechtet dieses ist mein 500ster Beitrag
wenigstens ne kleine rakete:
*
|
|
|
Verfasst: 12.12.2004 13:20
von DarkDragon
Kannste dir das nicht selber denken wie das geht?
Code: Alles auswählen
Procedure.f Round2(Val.f)
Int = Int(Val)
If Val-Int < 0.5
ProcedureReturn Round(Val, 0)
Else
ProcedureReturn Round(Val, 1)
EndIf
EndProcedure
Float.f = 5.5
Debug Float
Debug Round2(Float.f)
Debug "---"
Float.f = 5.4
Debug Float
Debug Round2(Float.f)
Und was ist daran so schwer?
Verfasst: 12.12.2004 16:35
von Andre
@Kaeru: bzgl. Anleitung - ist vorgemerkt.
Ich meine, es gibt auch eine UserLib mit der von Dir gewünschten Rundungsfunktion. Schauste am besten mal in der bekannten Quelle...

Verfasst: 12.12.2004 17:44
von Lars
Das mit der Hilfe würde ich mir aber nochmal überlegen, Andre. Das
einfach so in die Hilfe zu Round einzubauen wäre irgendwie etwas
merkwürdig, professionell sieht das nicht aus.
Im grunde ist das kein hidden Feature, diese Problemlösung zu finden
nennt man allgemein Programmieren.
Verfasst: 12.12.2004 22:09
von Andre
@Lars: jawohl, Sir!
Bevor ich etwas schreibe, überlege ich mir den Inhalt schon nochmal gründlich und stimme diesen ggf. auch ab.

Verfasst: 12.12.2004 22:31
von Kaeru Gaman
@André
danke, ich fänds halt praktisch, wenn im manual was stehen würde.
@Lars
> Im grunde ist das kein hidden Feature
IMHO ist es nicht selbstverständlich, dass 'abrunden' im negativen bereich
absolut zu verstehen ist.
es soll ja auch garnicht in der anleitung stehen, wie man damit kaufmännisch rundet.
nur z.b. so
Hinweis: Die Rundung ist absolut.
Beispiel:
Round(-2.5, 0) = -3
Round(-2.5, 1) = -2
@DarkDragon
Ägypten????
hast du überhaupt ansatzweise verstanden, worauf ich hinaus will?
Code: Alles auswählen
Procedure.l RoundInt(var.f)
If var < 0
ProcedureReturn Int(var-0.5)
Else
ProcedureReturn Int(var+0.5)
EndIf
EndProcedure
dank Horsts antwort weiss ich jetzt:
Code: Alles auswählen
Procedure.l RoundInt(var.f)
ProcedureReturn Round(var+0.5,0)
EndProcedure
was natürlich heisst, dass man garkeine Proc mehr braucht, nur ne Long-Zielvariable.