Seite 1 von 4
Nachkommastellen und überflüssige Nullen
Verfasst: 07.11.2005 16:29
von PB42
Hallo,
ich möchte in meiner Ergebnisanzeige 4 Nachkommastellen haben, wobei aber überflüssige Nullen am Ende unterdrückt werden sollen. Was ich also NICHT will, sind folgende Ergebnisanzeigen:
5.5000 oder 70.1200 oder 10.9710 usw., sondern stattdessen 5.5 und 70.12 und 10.971
Wie macht man das? Danke.
PB42
Verfasst: 07.11.2005 16:36
von ts-soft
1. Dein Ergebnis, also das Float * 10000 in Integer umwandeln
2. Inter in String umwandeln
3. letzten 4 Buchstaben von hinten auf 0 parsen und gegebenenfalls entfernen, anzahl der entfernten merken
4. einen punkt in den String setzen, 4 Stelle - entfernter von hinten
5. Float aus String ermitteln
So einfach kannste das machen

Verfasst: 07.11.2005 16:40
von DarkDragon
ts-soft hat geschrieben:1. Dein Ergebnis, also das Float * 10000 in Integer umwandeln
2. Inter in String umwandeln
3. letzten 4 Buchstaben von hinten auf 0 parsen und gegebenenfalls entfernen, anzahl der entfernten merken
4. einen punkt in den String setzen, 4 Stelle - entfernter von hinten
5. Float aus String ermitteln
So einfach kannste das machen

Mit Kanonen auf Spatzen? Wozu das ganze in einen Long umwandeln, wenns doch auch StrF() gibt? Da kann man auch die letzten stellen auf 0 hin Parsen.
[EDIT]
Lösung:
Code: Alles auswählen
Procedure.s StrF_Ex(Float.f, NbDecimals)
Result1.s = StrF(Float, NbDecimals)
Result2.s = ""
c = 0
For k=0 To Len(Result1)-1
Char.s = Mid(Result1, k, 1)
If Char = "."
c = 1
EndIf
If c = 1 And Char = "0"
Break
EndIf
Result2 + Char
Next
ProcedureReturn Result2
EndProcedure
Debug StrF_Ex(123.4500, 4)
Verfasst: 07.11.2005 16:50
von ts-soft
>> Wozu das ganze in einen Long umwandeln
Damit ich auf jedenfall 4 stellen hinter dem Komma habe, sonst muß ich ja noch das komma parsen
Natürlich 4 Kommastellen im Wert, ohne das Komma bzw. den Punkt.
//Nachtrag:
Test des Codes von DD:
Code: Alles auswählen
Procedure.s StrF_Ex(Float.f, NbDecimals)
Result1.s = StrF(Float, NbDecimals)
Result2.s = ""
c = 0
For k=0 To Len(Result1)-1
Char.s = Mid(Result1, k, 1)
If Char = "."
c = 1
EndIf
If c = 1 And Char = "0"
Break
EndIf
Result2 + Char
Next
ProcedureReturn Result2
EndProcedure
StrF_Ex.f
Debug StrF_Ex(13.4504889, 4)
Ich sehe ein falsches Ergebnis

Verfasst: 07.11.2005 16:51
von PB42
Das ganze mit INTEGER zu machen, darauf bin ich natürlich auch selber gekommen, ts-soft.

Ich suchte nach einer Funktion als Ersatz für StrF, mit welcher man ebenfalls die Anzahl der Nachkommastellen einstellen kann, welche aber dann selbständig überflüssige Nullen erkennt und abschneidet. Wäre ne gute Bereicherung in PB.
PB42
Verfasst: 07.11.2005 16:54
von DarkDragon
ts-soft hat geschrieben:>> Wozu das ganze in einen Long umwandeln
Damit ich auf jedenfall 4 stellen hinter dem Komma habe, sonst muß ich ja noch das komma parsen
Natürlich 4 Kommastellen im Wert, ohne das Komma bzw. den Punkt.
Was bringt das dir? Du musst doch eh den ganzen String dann durchgehen und zum schluss musst du dann den String auch noch zerschnibbeln und das Komma reinkleben.
Verfasst: 07.11.2005 16:57
von ts-soft
Vielleicht geht dein Weg ja auch, bei mir ist das ergebnis nur 10x zu gross
Verfasst: 07.11.2005 17:17
von DarkDragon
ts-soft hat geschrieben:Ich sehe ein falsches Ergebnis

Code: Alles auswählen
Procedure.s StrF_Ex(Float.f, NbDecimals)
Result1.s = StrF(Float, NbDecimals)
Result2.s = ""
For k=Len(Result1) To 0 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 17:27
von Christi
Code: Alles auswählen
Debug ReplaceString(RTrim(ReplaceString(StrF(20.300, 2), "0", " ", 2)), " ", "0", 2)

Verfasst: 07.11.2005 17:32
von ts-soft
@DD
Verstehe ich nicht, was Du meinst, nach Deiner Formel kommt: 113.4505
statt 13.4505