Round() - kann das jemand so brauchen wie es ist?

Für allgemeine Fragen zur Programmierung mit PureBasic.

Benutzt ihr Round(Zahl.f, modus) ?

Ja, brauche ich dauernd!
3
19%
Könnt ich mir schon vorstellen, dass ich es mal brauche.
4
25%
Hab ich noch nie gebraucht, ist mir auch egal.
2
13%
Ich hätt lieber ne funktion, die rundet wie üblich.
7
44%
 
Insgesamt abgegebene Stimmen: 16

Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Round() - kann das jemand so brauchen wie es ist?

Beitrag 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.
horst
Beiträge: 70
Registriert: 08.09.2004 19:33
Wohnort: München
Kontaktdaten:

Re: Round() - kann das jemand so brauchen wie es ist?

Beitrag 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)
horst
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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:

*
|
|
|
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@Kaeru: bzgl. Anleitung - ist vorgemerkt. :wink:

Ich meine, es gibt auch eine UserLib mit der von Dir gewünschten Rundungsfunktion. Schauste am besten mal in der bekannten Quelle... 8)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@Lars: jawohl, Sir! :wink:

Bevor ich etwas schreibe, überlege ich mir den Inhalt schon nochmal gründlich und stimme diesen ggf. auch ab. 8)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Antworten