Variable auf 2 Kommastellen genau anzeigen

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Fox

Betreff: Variable auf 2 Kommastellen genau anzeigen

BeitragDi, Jul 20, 2004 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
hiho,

ich habe ein kleines problem mit einer variablen, die einen geldwert widergeben soll. nach der initialisierung wird sie zunächst mit einer stelle nach dem komma vom programm anzeigt (xxx.x eur). durch rundungsungenauigkeiten kommen neue nachkommastellen hinzu, je länger ich mit dem programm arbeite (xxx.xxxxxx eur).

gibt es eine möglichkeit, das programm zu veranlassen, den wert immer genau auf 2 nachkommastellen auszugeben?

vielen dank im voraus!

- fox

dominik

BeitragDi, Jul 20, 2004 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
schau in der onlinehilfe unter:
- len
- left-
- right
 

Fox

BeitragDi, Jul 20, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht liegts an meiner geistigen maximalkapazität, die offensichtlich heute stark begrenzt ist...aber... kann mir jemand ein beispiel geben?

danke!

dominik

BeitragDi, Jul 20, 2004 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
sind doch beispiele dabei.
Neu$=LEFT$ (Text$, Anzahl)

neu$ => der neu text (gekürtzt)
text$ => der ursprüngliche zulange text/zahlen die gekürtzt werden sollen
anzahl => die anzahl an zeichen die von links kopiert wersen sollen alles was daneben steht wird irgnoriet gelöscht.

genaus des gleiche mit right nur halt von rechts, und len erittelt die maximale anzahl an zeichen.
 

hot-bit

Gast

BeitragDi, Jul 20, 2004 21:41
Antworten mit Zitat
Hi,

dominik: du verstehst das falsch ...

Er will RICHTIG gerundete Zahlen- Werte haben.

Es gab hier mal schon eine Diskussion darüber und Lösungen ...

Toni
 

Jake

BeitragDi, Jul 20, 2004 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Janaklar!

Function TrimFloat#(v#,digits%=2)
local s$=Str(v#)
local pointpos%=Instr(s$,".")
Return (Float(Mid(s$,1,pointpos+digits)))
End Function

Achtung: Es wird NICHT gerundet, sondern nur abgeschnitten. Also besser nicht für Buchführung benutzen Laughing

Jake

dominik

BeitragDi, Jul 20, 2004 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ja dann soll er halt die letzten 3 zahlen lesen wenn er 2 haben will feststellen ob die 3 größer bzw kleiner 5 is und dann die 2 entsprechen ändern.

Holzchopf

Meisterpacker

BeitragDi, Jul 20, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm sone Rundungsfunktion hab' ich doch irgendwo hier liegen...

...

Et voilà:
Code: [AUSKLAPPEN]

Function StellenRunden#( Zahl#, Stellen )
   
   Return Int( Zahl * 10 ^ Stellen ) / Float( 10 ^ Stellen )

End Function


Da wird sogar gerundet Wink

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Fox

BeitragDi, Jul 20, 2004 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
funktioniert holzchopf!

danke an alle, die geantwortet haben Wink

Markus2

BeitragDi, Jul 20, 2004 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
runden mit Int( Zahl + 0.5 ) ist besser Wink

Holzchopf

Meisterpacker

BeitragDi, Jul 20, 2004 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wiso?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

OJay

BeitragDi, Jul 20, 2004 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
1,6 + 0,5 = 2 -> ok
1,8 + 0,5 = 2 -> ok
2,0 + 0,5 = 3 -> ??? ohoh
2,2 + 0,5 = 3 -> ??? ohoh

Wink
 

hot-bit

Gast

BeitragMi, Jul 21, 2004 1:19
Antworten mit Zitat
Hello ..

Ich habe immer so gewerkt :

Zitat:
; n=Stellen auf welche gerundet wird.
; Int(10^n*Zahl+.5)/10^n
Cls
a# = 100.45218
b# = Int(10 ^ 2 * a + .5) / 10 ^ 2

Print a
Print b

WaitKey
End


Vielleicht hilft das ..

Toni

Blatolo

BeitragMi, Jul 21, 2004 6:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso hast du denn auch dieses +.5 drin?
Ich benutze auch eine solche Funktion wie Holzchopf.(nur dass ich bei mir kein float drin hab.
Ich könnte mir diese +0.5 nur in Verbindung mit dieser funktion bei der nicht gerundet wird(also nur abgeschnitten) vorstellen
  • Zuletzt bearbeitet von Blatolo am Mi, Jul 21, 2004 12:36, insgesamt einmal bearbeitet
 

Gerhard

BeitragMi, Jul 21, 2004 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim kaufmännischen Runden wird 0,5 auf 1 gerundet. Durch die Addition von 0,5 erhält man so einen Überlauf. Alles unter 0,5 führt zu keinem Überlauf und kann daher abgeschnitten werden, ohne dass die letzte Stelle um eins erhöht wird. Also

1,235 wird 1,24
1,234 wird 1,23

@ Fox:
Vorsicht bei Anwendungen. Ich wollte ein Programm für's Büro machen, bin aber an dem Ergebnis von Multiplikationen mit mehreren Nachkommastellen gescheitert. Blitz rechnet nicht mit gleicher Genauigkeit wie z.B. VB!

Holzchopf

Meisterpacker

BeitragMi, Jul 21, 2004 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm...
Blitz tut sich beim Runden sowieso schwer, schaut euch mal das hier an:
Code: [AUSKLAPPEN]

Graphics 800,600,16,2

While Not KeyDown(1)

   Cls

   For a# = s To s+4 Step 0.1
   
      b = ( a + 0.5 ) * 10
      Zahl# = a
      v1 = Int(a)
      v2 = Floor(a+.5)
      v3 = Floor(b/10.0)
      v4 = Str(a+.5)
      If v1 = v2 And v3 = v4 And v1 = v3 Then
         Color 255,255,255
      Else
         Color 255,0,0
      EndIf
      
      Text 0, (a Mod 4) * 140, Zahl
      Text 100, (a Mod 4) * 140, v1
      Text 150, (a Mod 4) * 140, v2
      Text 200, (a Mod 4) * 140, v3
      Text 250, (a Mod 4) * 140, v4
      
   Next

   s = s + 4
   
   WaitKey()

Wend

End


(JA, in den roten Zeilen ist was faul)

So wie's den Anschein hat, kann man in Blitz nur dann genau runden, wenn man String-Funktionen arbeitet (macht sich bei den höheren Zahlen, so ab 30, bemerkbar)...
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

hot-bit

Gast

BeitragMi, Jul 21, 2004 11:14
Antworten mit Zitat
Hi,

Ja, diese Diskussion hatten wir hier ja schon.

BB hat hier gegenüber QBasic echt das Nachsehen.

Mit der Methode, welche ich gepostet habe, wird in QBasic sehr genau gerechnet.

In BB wird nicht so genau gerundet.

Wahrscheinlich um die Geschwindigkeit von BB nicht zu beeinträchtigen.

Bei Games braucht man soo genaue Zahlen ja nicht ! Smile

Toni

Markus2

BeitragMi, Jul 21, 2004 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
OJay hat Folgendes geschrieben:
1,6 + 0,5 = 2 -> ok
1,8 + 0,5 = 2 -> ok
2,0 + 0,5 = 3 -> ??? ohoh
2,2 + 0,5 = 3 -> ??? ohoh

Wink



Nix OH

DebugLog Int(2.0+0.5)
WaitKey
End

sind bei mir 2 !
2,7 sind bei mir 3

außerdem sollte es ja vorher mit *100 /100 benutzt werden Wink

Holzchopf

Meisterpacker

BeitragMi, Jul 21, 2004 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:

Nix OH

DebugLog Int(2.0+0.5)
WaitKey
End

sind bei mir 2 !
2,7 sind bei mir 3

außerdem sollte es ja vorher mit *100 /100 benutzt werden Wink


schön...

DebugLog Int(2.1+0.5)
WaitKey
End

...gibt aber auch 3 Rolling Eyes

Da ändert auch das *100/100 nix dran Wink
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Blatolo

BeitragMi, Jul 21, 2004 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke mal dass wenn man dieses +0.5 anwendet man dann einfach nur die nachkommastellen abschneiden soll anstatt zu runden denn durch dieses +0.5 würde das dann richtige Ergebnisse liefern

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group