Floats auf bestimmte Nachkommastelle runden

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

d-bug

Betreff: Floats auf bestimmte Nachkommastelle runden

BeitragDo, Jul 21, 2005 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich eben in die Verlegenheit kam, daß Blitz meinte 0.2 - 0.1 seien 0.09999 suchte ich verzweifelt an einer RoundTo Funktion. Gibts natürlich nicht Sad ... ganxta zeigte mir einen thread indem morzeck eine floor_double und ceil_double funktion für bmax einwarf. Ich nahm sie mir und münzte sie auf besagte RoundTo Funktion um...

Code: [AUSKLAPPEN]
Function RoundTo# (value#,digit)
 If digit < Len(Str(value))-Instr(Str(value),".")
  nextvalue = Int(Mid(Str(value),Instr(Str(value),".")+digit+1,1))
  If nextvalue > 4
   Return Ceil(value*10^digit)/10^digit
  Else
   Return Floor(value*10^digit)/10^digit
  EndIf
 Else
  Return value
 EndIf
End Function


evtl. kann es ja jemand gebrauchen, oder hat Verbesserungsvorschläge

greetz
  • Zuletzt bearbeitet von d-bug am Fr, Jul 29, 2005 17:51, insgesamt einmal bearbeitet

Xaron

BeitragMo, Jul 25, 2005 9:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Du möchtest mit der Funktion doch auf eine bestimmte Nachkommastelle runden, oder?

Warum dann nicht einfach:

Code: [AUSKLAPPEN]
Function RoundTo# (value#,digit)
  Return Floor(value*10^digit+0.5)/10^digit
End Function


Gruß - Xaron
Cerberus X - Monkey X Reloaded!
  • Zuletzt bearbeitet von Xaron am Di, Aug 02, 2005 13:28, insgesamt einmal bearbeitet
 

Absoluter Beginner

BeitragMo, Jul 25, 2005 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Code rundet aber zB bei 1.09 auf 1.0 und nicht auf 1.1 Also eher FloorTo statt RoundTo
Error Inside!

Xaron

BeitragMo, Jul 25, 2005 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Absoluter Beginner hat Folgendes geschrieben:
Dein Code rundet aber zB bei 1.09 auf 1.0 und nicht auf 1.1 Also eher FloorTo statt RoundTo


Tut er nicht.

RoundTo( 1.09, 0 ) liefert: 1
RoundTo( 1.09, 1 ) liefert: 1.1
RoundTo( 1.09, 2 ) liefert: 1.09

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

d-bug

BeitragFr, Jul 29, 2005 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hui Xaron, auf diese Variante bin ich nicht gekommen Smile. Stimmt, beide funktionieren gleich und haben auch den gleichen Fehler, denn 1.05 z.B. müßte ja auf 1.1 gerundet werden und nicht auf 1.0... dies kannst du bei meiner Funktion beinflussen...

P.S.: Hab diesen Fehler in der oberen Funktion verbessert

Xaron

BeitragDi, Aug 02, 2005 9:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Hinweis, d:bug!

Die Int()-Funktion scheint buggy zu sein, ich hab's mal im offiziellen Forum gepostet. Bei allen ungeraden (Vorkomma-)Zahlen arbeitet sie korrekt:

Int(1.5) liefert 2

Bei allen geraden (Vorkomma-)Zahlen arbeitet sie nicht korrekt:

Int(4.5) liefert 4

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

Xaron

BeitragDi, Aug 02, 2005 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab meine Funktion oben mal entsprechend berichtigt, d:bug, jetzt bist Du wieder am Zug. Wink

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

d-bug

BeitragMi, Aug 03, 2005 8:35
Antworten mit Zitat
Benutzer-Profile anzeigen
dies war zwar keine wettbewerb, aber o.k., du hast gewonnen Wink ... Schick dir morgen eine Keks Smile

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group