Seite 2 von 4
Verfasst: 07.11.2005 19:13
von Lupo
Juhu ein Wettbewerb!
Code: Alles auswählen
Dim zahl.f(6)
zahl(1) = 100.1234
zahl(2) = 100.1230
zahl(3) = 100.1200
zahl(4) = 100.1000
zahl(5) = 100.0000
zahl(6) = 100
stellen = 4
For i = 1 To 6
Debug ReplaceString(ReplaceString(RTrim(ReplaceString(StrF(zahl(i), stellen), "0", " ", stellen)), " ", "0", stellen) , ".", "", 0, Len(ReplaceString(RTrim(ReplaceString(StrF(zahl(i), stellen), "0", " ", stellen)), " ", "0", stellen)))
Next
Ganz ohne Punkt hinten
Danke
LUPO
Verfasst: 07.11.2005 19:17
von DarkDragon
ts-soft hat geschrieben:@DD
Verstehe ich nicht, was Du meinst, nach Deiner Formel kommt: 113.4505
statt 13.4505
Boh mann ich hab auch noch besseres zu tun(das bissel kann man auch selber verstehen und fixen):
Code: Alles auswählen
Procedure.s StrF_Ex(Float.f, NbDecimals)
Result1.s = StrF(Float, NbDecimals)
Result2.s = ""
For k=Len(Result1) To 1 Step -1
Char.s = Mid(Result1, k, 1)
If Char <> "0" And c = 0
Result2 = Char+Result2
c = 1
ElseIf c = 1
Result2 = Char+Result2
EndIf
Next
ProcedureReturn Result2
EndProcedure
Debug StrF_Ex(13.4504889, 4)
Verfasst: 07.11.2005 19:18
von ts-soft
>> Juhu ein Wettbewerb!
Sowas in der Art in einem Contest (natürlich mehrere Aufgaben),
dann würde ich mich beteiligen.
>> Boh mann ich hab auch noch besseres zu tun(das bissel kann man auch selber verstehen und fixen):
Vielleicht haben andere auch besseres zu tun, als Deine fehlerhaften Proceduren zu fixen

Verfasst: 07.11.2005 19:20
von PB42
Folgender Code sollte die überflüssigen Nullen in Nachkommastellen abschneiden, aber das scheitert an Rechenungenauigkeiten. Im Fall vom Ausgangswert 1.7000 zeigt Debug(y.f) tatsächlich exakt Null an, aber TROTZDEM bleibt der Wert x Null!!! Das kann demnach nur daran liegen, daß jenseits der sechsten Nachkommastelle im Debugger auch noch Zahlen existieren, sodaß der Debugger nur scheinbar für den Wert x exakt Null anzeigt.
Code: Alles auswählen
OpenWindow(0,0,0,606,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_minimizeGadget|#PB_Window_maximizeGadget,"")
CreateGadgetList(WindowID(0))
TextGadget(1,200,100,100,20,"",#PB_text_border)
h.f = 1.700
Repeat
y.f = (h.f - Int(h.f))
If y.f = 0
x = 0
Goto A
EndIf
y.f = (h.f * 10 - Int(h.f * 10))
Debug(y.f)
If y.f = 0
x = 1
Goto A
EndIf
y.f = (h.f * 100 - Int(h.f * 100))
If y.f = 0
x = 2
Goto A
EndIf
y.f = (h.f * 1000 - Int(h.f * 1000))
If y.f = 0
x = 3
Goto A
EndIf
y.f = (h.f * 10000 - Int(h.f * 10000))
If y.f = 0
x = 4
Goto A
EndIf
A:
SetGadgetText(1,StrF(h.f,x))
EventID = WaitWindowEvent()
Until EventID = #PB_EventCloseWindow
PB42
Verfasst: 07.11.2005 20:02
von freedimension
Wenn du deinen Code jetzt noch gescheit einrückst schau ich es mir vielleicht sogar mal an

Verfasst: 07.11.2005 20:19
von DarkDragon
ts-soft hat geschrieben:>> Boh mann ich hab auch noch besseres zu tun(das bissel kann man auch selber verstehen und fixen):
Vielleicht haben andere auch besseres zu tun, als Deine fehlerhaften Proceduren zu fixen

Ich wollt ja nur nen Ansatz geben und den hab ich in ner Minute mal schnell zusammengebastelt. Du musst wissen gestern wurde meine Seite(zumindest das phpBB) gehackt und ich bin am updaten von allem usw.. Außerdem musste ich noch für die Schule lernen.
Verfasst: 07.11.2005 21:02
von ts-soft
@DD
War ja auch nicht böse gemeint

, geht mir ja auch oft so. Ich Schreibe dann aber meist bei: Ungetestet oder so!
Verfasst: 07.11.2005 23:23
von PB42
@ freedimension: Hi! Den kurzen Code würde ich selber nie einrücken, aber ich hab mir solche Mühe gemacht, den einzurücken

Nun gut: Der Code, den ich da oben eingestellt habe, ist ein erschreckendes Beispiel dafür, wie schlecht man mit Floatzahlen arbeiten kann. Warum können das denn 20 Jahre alte Taschenrechner wesentlich besser?
PB42
Verfasst: 07.11.2005 23:33
von freedimension
PB42 hat geschrieben:@ freedimension: Hi! Den kurzen Code würde ich selber nie einrücken, aber ich hab mir solche Mühe gemacht, den einzurücken
Vergiss es, ich habe mich des Elends schon selbst angenommen

Verfasst: 09.11.2005 12:35
von Kaeru Gaman
floats SIND nunmal ungenau, und taschenrechner können sowas nur besser, wenn sie mehr bits für ihre berechnugen benutzen...
aber wie schon vorgeschlagen, warum parst du nicht einfach das ergebnis von StrF() von hinten nach nullern?