Seite 2 von 4

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 11:25
von Andesdaf
Naja, ValF wird mit dem Tausenderkomma nichts anzufangen wissen und bricht
daher ab. In der Hilfe steht:

Das Parsen (Suchen) nach Zahlen stoppt beim ersten nicht numerischen Zeichen.

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 12:39
von Pelagio
@Andesdaf

eben!
Ich kann also FormatNumber nur zur Darstellung von Zahlen benutzen, selber aber keine Berechnungen anstellen.
Wie schon geschrieben, ist dies der Sinn von dem Befehl so ist es so.
Man muss dies nur mit Gewissheit wissen.

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 15:33
von NicTheQuick
Ich hab mir's noch nicht angeschaut, aber kann FormatNumber() auch Sprachenspezifisch formatieren? "1,234.56" ist nicht gerade deutsch. Das wäre eher "1234,56", maximal noch mit Leerzeichen zwischen 1 und 2.

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 16:41
von mhs
Ja, man kann scheinbar per Parameter die Zeichen für 1000er Trennung und Komma angeben.

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 16:43
von RSBasic
Ja, kannst du. Beispiel:

Code: Alles auswählen

Debug FormatNumber(1234567.8987, 2, ",", " ")
Ausgabe hat geschrieben:1 234 567,90
Parameterliste:

Code: Alles auswählen

FormatNumber(Number.d, NbDecimals, DecimalPoint$, ThousandSeperator$)
Beschreibung:
Number.d: Zahl
NbDecimals: Anzahl der Stellen nach dem Komma
DecimalPoint$: Ersatzzeichen für das Komma
ThousandSeperator$: Ersatzzeichen für die Tausenderstelle

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 16:54
von Nino
Pelagio hat geschrieben:Ich kann also FormatNumber nur zur Darstellung von Zahlen benutzen, selber aber keine Berechnungen anstellen.
Du kannst auch das Ergebnis von FormatNumber() weiterverwenden.
Aber halt nur wenn es so "geformt" ist, dass die anderen Funktionen damit umgehen können.
Konkret heißt das in dem von dir genannten Beispiel, dass FormatNumber() kein Tausendertrennzeichen verwenden darf, z.B.

Code: Alles auswählen

d.d = 1123.456
Debug d
s.s = FormatNumber(d, 2, ".", "")
Debug s
Debug ValD(s)

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 16:56
von Nino
mhs hat geschrieben:Ja, man kann scheinbar per Parameter die Zeichen für 1000er Trennung und Komma angeben.
Man kann das nicht "scheinbar" tun, sondern tatsächlich. :-)

Re: PureBasic 5.50 Beta 1

Verfasst: 07.06.2016 20:46
von #NULL
ValF() ist eher als gegenstück zu StrF() zu sehen, und nicht zu FormatNumber() bzw. zu benutzereingaben.
bei umwandlung von FormatNumber() oder benutzereingaben mit tausendertrennzeichen einfach ReplaceString "," mit "" (bei z.b. US format) und dann ValF().
bei umwandlung von z.b. deutschem format ReplaceString() "." mit "", und danach ReplaceString() "," mit ".", dann ValF().

<edit>

Code: Alles auswählen

Procedure.d UnFormatNumber(s$, decimalMark$="," ,thousandsSeparator$=".")
  s$ = ReplaceString(s$, thousandsSeparator$, "")
  If decimalMark$ <> "."
    s$ = ReplaceString(s$, decimalMark$, ".")
  EndIf
  ProcedureReturn ValD(s$)
EndProcedure

d.d = 123456.789

Debug d
Debug FormatNumber(d)
Debug FormatNumber(d, 2, "," ,".")

Debug UnFormatNumber("123.456,789")
Debug UnFormatNumber("123,456.789", "." ,",")

Re: PureBasic 5.50 Beta 1

Verfasst: 08.06.2016 00:20
von RSBasic
Besser wäre es, wenn es ParseNumber() gäbe. Wie bei FormatDate() <=> ParseDate()
Dann ist es einheitlicher.

Re: PureBasic 5.50 Beta 1

Verfasst: 08.06.2016 05:08
von Pelagio
Guten Morgen an alle,
das Ergebnis meiner Anfrage ist genau das was ich mir erhofft habe und was RSBasic folgerichtig formuliert hat.
FormatNumber an sich ist schön zum Anzeigen aber mit ParseNumber könnte man damit auch schön Arbeiten.
:allright: