Hallo Leute,
habe mir jetzt einige PB-Lösungen zum Thema "formatierte" Eingabe von Zahlwerten (z. B. für Währungen: max. 1 Komma, max. 2 Kommastellen, mit oder ohne 1000er Punkt) angeguckt und muss sagen, das Problem ist zwar oftmals pfiffig gelöst, jedoch meiner Meinung nach nicht wirklich gut. Oder ich habe - den Wald vor lauter Bäumen nicht sehend - die (für mich) richtige Lösung nicht gefunden.
Bitte mich nicht falsch verstehen - all die Programmierungen übersteigen meine Möglichkeiten um einiges und ich erkenne die Programmierleistungen gerne an. Allerdings fehlen mir einige Features - beispielsweise müsste die Null vor dem Komma bei Beträgen unter 1 Euro automatisch mit einem Wert überschrieben werden, bei Beträgen über 1 Euro dürfte die gar nicht als führende Null möglich sein. Bei den Cent-Beträgen müssten die Nullen überschrieben werden können, ohne vorher gelöscht werden zu müssen.
Kennt jemand den "ultimativen" Code für ein "Währungs-Stringgadget" oder eine fertige DLL (oder was anderes Externes, in PB nutzbares), die eine bessere Datenerfassung von Währungen, aber auch von anderen Datenformaten (z.B. m³ mit 3-stelligen Kommawerten) möglich macht? Der Knaller wäre natürlich, stünde die Einheit (Euro, Kubikmeter, was auch immer) im Eingabefeld , links oder rechts, mit drin - wie zum Beispiel in Tabellkalkulationen möglich.
Stringgadget für Währung (und andere Einheiten)
- wie_jetzt?
- Beiträge: 21
- Registriert: 28.08.2017 17:23
Stringgadget für Währung (und andere Einheiten)
Was das Programmieren angeht, bin ich ein Anfänger mit fast 40 Jahren Erfahrung, mit gelegentlichen, mitunter jahrzehntelangen Unterbrechungen. Kann mich noch dunkel an den TI58 bei der Bundeswehr Anfang der 1980er erinnern. Habe da mit "Mondlandung" viele Stunden der Heimatverteidung verbracht - Insider werden's kennen.
... wir hatten doch sonst nix!
... wir hatten doch sonst nix!
Re: Stringgadget für Währung (und andere Einheiten)
Hätte da noch eine DLL anzubieten :
http://xprofan.net/intl/de/forum/listvi ... nedit-dll/
Da brauchst du aber ein echtes Handle für die Editfelder, also
mit #Pb_Any erzeugen.
http://xprofan.net/intl/de/forum/listvi ... nedit-dll/
Da brauchst du aber ein echtes Handle für die Editfelder, also
mit #Pb_Any erzeugen.
PB 5.60
- Sylvia
- verheiratet<br>1. PureGolf-Gewinner
- Beiträge: 487
- Registriert: 29.08.2004 09:42
- Wohnort: Old Europe
Re: Stringgadget für Währung (und andere Einheiten)
Vielleicht sowas? Schon etwas älter, benutze es aber immer, immer wieder:
Code: Alles auswählen
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=3279&highlight=
; Author: Sylvia
; Date: 29. December 2003
; OS: Windows
; Demo: Yes
;**********************************
;* 2003 Dec.29 "Sylvia" GermanForum
;**********************************
Procedure.s StringUsing(Format$,Wert)
; Liefert einen formatierten Zahlenstring zurück
;
; Format$ = Erste 2 Zeichen= ">$" = Wert wird Hexadezimal konvertiert
; Erste 2 Zeichen= ">%" = Wert wird Binär konvertiert
;
; 0 Ziffer/Vorzeichen oder zwingend 0
; # Ziffer/Vorzeichen oder Blank
;
; andere Zeichen werden 1:1 ausgegeben
;
; Result$ = formatierter Zahlenstring
Protected Result$,a,Wert$
Result$=""
If Len(Format$)=0: Goto StringUsingEnd: EndIf
; Wert in Hex/Binär/Dezimal-String umwandeln
Select Left(Format$,2)
Case ">$": Wert$=Hex(Wert): Format$=Right(Format$,Len(Format$)-2)
Case ">%": Wert$=Bin(Wert): Format$=Right(Format$,Len(Format$)-2)
Default: Wert$=Str(Wert)
EndSelect
; Result$ von hinten auffüllen
For a=Len(Format$) To 1 Step -1
Select Mid(Format$,a,1)
Case "0"
If Len(Wert$)
Result$=Right(Wert$,1)+Result$
Wert$=Left(Wert$,Len(Wert$)-1)
Else
Result$="0"+Result$
EndIf
Case "#"
If Len(Wert$)
Result$=Right(Wert$,1)+Result$
Wert$=Left(Wert$,Len(Wert$)-1)
Else
Result$=" "+Result$
EndIf
Default
Result$=Mid(Format$,a,1)+Result$
EndSelect
Next a
StringUsingEnd:
ProcedureReturn Result$
EndProcedure
; Beispiele
a$=">% %######## ########": Zahl= 123456789: Debug StringUsing(a$,Zahl)
a$=">%%0000 0000 0000 0000": Zahl= 123456789: Debug StringUsing(a$,Zahl)
Debug ""
a$=">$ 00 00 00 00": Zahl= 123456789: Debug StringUsing(a$,Zahl)
a$=">$ 0000 0000": Zahl= 123456789: Debug StringUsing(a$,Zahl)
Debug ""
a$="###0.000 kByte": Zahl= 123456789/1024: Debug StringUsing(a$,Zahl)
Basic Pur = PureBasic
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: Stringgadget für Währung (und andere Einheiten)
Hallo,
hier eine kleine Währungs-Eingabe und Ausgabe Weltreise für weltweite Programme:
-123.456.789,00 € ; Deutschland
-123 456 789,00 € ; Frankreich
-€123,456,789.00 ; Irland
Fr.-123'456'789.00 ; Schweiz deutschsprachig
-123'456'789.00 fr. ; Schweiz französichsprachig
fr.-123'456'789.00 ; Schweiz ital.
-£123,456,789.00 ; UK
-$123,456,789.00 ; Australien
-R$ 123.456.789,00 ; Brasilien
-¥123,456,789 ; Japan keine Dezimalstellen
¥-123,456,789.00 ; China
₹ -1234,56,789.00 ; Indien englisch Zifferngruppierung
₹ -12,34,56,789.00 ; Indien Hindi Zifferngruppierung
($123,456,789.00) ; USA Klammern stehen für Minus
Wiki Währungsliste ISO 4717
Vielleicht hat ja jemand Lust auf eine Weltreise mit physikalischen Eingaben und Ausgaben?
hier eine kleine Währungs-Eingabe und Ausgabe Weltreise für weltweite Programme:
-123.456.789,00 € ; Deutschland
-123 456 789,00 € ; Frankreich
-€123,456,789.00 ; Irland
Fr.-123'456'789.00 ; Schweiz deutschsprachig
-123'456'789.00 fr. ; Schweiz französichsprachig
fr.-123'456'789.00 ; Schweiz ital.
-£123,456,789.00 ; UK
-$123,456,789.00 ; Australien
-R$ 123.456.789,00 ; Brasilien
-¥123,456,789 ; Japan keine Dezimalstellen
¥-123,456,789.00 ; China
₹ -1234,56,789.00 ; Indien englisch Zifferngruppierung
₹ -12,34,56,789.00 ; Indien Hindi Zifferngruppierung
($123,456,789.00) ; USA Klammern stehen für Minus
Wiki Währungsliste ISO 4717
Vielleicht hat ja jemand Lust auf eine Weltreise mit physikalischen Eingaben und Ausgaben?
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
- Thorsten1867
- Beiträge: 1359
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Re: Stringgadget für Währung (und andere Einheiten)
Code: Alles auswählen
Procedure.s FormatCash(Value.d, Country.s, Mask.s)
Define Value$, Negativ = #False
If Value < 0 : Negativ = #True : EndIf
Select Left(Country, 2)
Case "DE", "AT", "IT", "ES" ; Germany / Austria / Italy / Spain
ProcedureReturn FormatNumber(Value, 2, ",", ".")+" €"
Case "FR" ; France
ProcedureReturn FormatNumber(Value, 2, ",", " ")+" €"
Case "IE" ;{ Ireland
If Negativ
ProcedureReturn ReplaceString(FormatNumber(Value, 2, ".", ","), "-", "-€")
Else
ProcedureReturn "€"+FormatNumber(Value, 2, ".", ",")
EndIf ;}
Case "CH" ;{ Switzerland
Select Mid(Country, 3, 2)
Case "FR"
ProcedureReturn FormatNumber(Value, 2, ".", "'")+" fr."
Case "IT"
ProcedureReturn "fr."+FormatNumber(Value, 2, ".", "'")
Default
ProcedureReturn "Fr."+FormatNumber(Value, 2, ".", "'")
EndSelect ;}
Case "GB" ;{ Great Britain
If Negativ
ProcedureReturn ReplaceString(FormatNumber(Value, 2, ".", ","), "-", "-£")
Else
ProcedureReturn "£"+FormatNumber(Value, 2, ".", ",")
EndIf ;}
Case "AU" ;{ Australien
If Negativ
ProcedureReturn ReplaceString(FormatNumber(Value, 2, ".", ","), "-", "-$")
Else
ProcedureReturn "$"+FormatNumber(Value, 2, ".", ",")
EndIf ;}
Case "BR" ;{ Brazil
If Negativ
ProcedureReturn ReplaceString(FormatNumber(Value, 2, ".", ","), "-", "-R$ ")
Else
ProcedureReturn "R$ "+FormatNumber(Value, 2, ".", ",")
EndIf ;}
Case "JP" ;{ Japan
If Negativ
ProcedureReturn ReplaceString(FormatNumber(Value, 0, ".", ","), "-", "-¥")
Else
ProcedureReturn "¥"+FormatNumber(Value, 0, ".", ",")
EndIf ;}
Case "CN" ; China
ProcedureReturn "¥"+FormatNumber(Value, 2, ".", ",")
Case "US" ;{ USA
If Negativ
ProcedureReturn ReplaceString(FormatNumber(Value, 2, ".", ","), "-", "($")+")"
Else
ProcedureReturn "$"+FormatNumber(Value, 2, ".", ",")
EndIf ;}
Default
Debug "not supported"
EndSelect
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Debug FormatCash(12.95, "DE")
CompilerEndIf
Zuletzt geändert von Thorsten1867 am 16.01.2019 13:54, insgesamt 3-mal geändert.
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: Stringgadget für Währung (und andere Einheiten)
Hallo Thorsten1867,
Folgendes ist mir aufgefallen:
Beim negativem US-Dollar fehlt das $ Zeichen.
Beim Real fehlen Leerzeichen
Bei der indischen Rupie fehlen die Leerzeichen und die Zifferngruppierung in Hindi und Englisch sind falsch.
Ab BHD über den südkoreanischen Wong bis Bitcoin stimmt die Anzahl der Stellen nicht.
Es gibt keine Option für die Darstellung anderer Ziffernsysteme wie beim irakischen Dinar.
Was passiert wenn ich Euro im US-amerikanischen oder einem indischen Format darstellen will?
Code: Alles auswählen
CompilerIf #PB_Compiler_IsMainFile
Read.s Land.s
While Land<>"ZZZ"
Debug Land+":"+FormatCash(-9876543210.99,Land)+" "+FormatCash(9876543210.99,Land)
Read.s Land
Wend
DataSection
Data.s "DE","FR","IE","CH","CHFR","CHIT","GB","AU","JP","CN","US"
Data.s "BR","IN","INEN","BHD","BIF","CLF","CLP","CVE","DJF","GNF","IQD","ISK"
Data.s "KMF","KRW","LYD","MGA","MRO","OMR","PYG","UGX","UYI","VND","XAF"
Data.s "XOF","XPF","XBT","ZZZ"
CompilerEndIf
; DE:-9.876.543.210,99 € 9.876.543.210,99 €
; FR:-9 876 543 210,99 € 9 876 543 210,99 €
; IE:-€9,876,543,210.99 €9,876,543,210.99
; CH:Fr.-9'876'543'210.99 Fr.9'876'543'210.99
; CHFR:-9'876'543'210.99 fr. 9'876'543'210.99 fr.
; CHIT:fr.-9'876'543'210.99 fr.9'876'543'210.99
; GB:-£9,876,543,210.99 £9,876,543,210.99
; AU:-$9,876,543,210.99 $9,876,543,210.99
; JP:-¥9,876,543,211 ¥9,876,543,211
; CN:¥-9,876,543,210.99 ¥9,876,543,210.99
; US:(9,876,543,210.99) $9,876,543,210.99
; BR:-R$9,876,543,210.99 R$9,876,543,210.99
; IN:₹-9,876,543,210.99 ₹9,876,543,210.99
; INEN:₹-9,876,543,210.99 ₹9,876,543,210.99
; BHD:-9,876,543,210.99 9,876,543,210.99
; BIF:-9,876,543,210.99 9,876,543,210.99
; CLF:-9,876,543,210.99 9,876,543,210.99
; CLP:-9,876,543,210.99 9,876,543,210.99
; CVE:-9,876,543,210.99 9,876,543,210.99
; DJF:-9,876,543,210.99 9,876,543,210.99
; GNF:-9,876,543,210.99 9,876,543,210.99
; IQD:-9,876,543,210.99 9,876,543,210.99
; ISK:-9,876,543,210.99 9,876,543,210.99
; KMF:-9,876,543,210.99 9,876,543,210.99
; KRW:-9,876,543,210.99 9,876,543,210.99
; LYD:-9,876,543,210.99 9,876,543,210.99
; MGA:-9,876,543,210.99 9,876,543,210.99
; MRO:-9,876,543,210.99 9,876,543,210.99
; OMR:-9,876,543,210.99 9,876,543,210.99
; PYG:-9,876,543,210.99 9,876,543,210.99
; UGX:-9,876,543,210.99 9,876,543,210.99
; UYI:-9,876,543,210.99 9,876,543,210.99
; VND:-9,876,543,210.99 9,876,543,210.99
; XAF:-9,876,543,210.99 9,876,543,210.99
; XOF:-9,876,543,210.99 9,876,543,210.99
; XPF:-9,876,543,210.99 9,876,543,210.99
; XBT:-9,876,543,210.99 9,876,543,210.99
Beim negativem US-Dollar fehlt das $ Zeichen.
Beim Real fehlen Leerzeichen
Bei der indischen Rupie fehlen die Leerzeichen und die Zifferngruppierung in Hindi und Englisch sind falsch.
Ab BHD über den südkoreanischen Wong bis Bitcoin stimmt die Anzahl der Stellen nicht.
Es gibt keine Option für die Darstellung anderer Ziffernsysteme wie beim irakischen Dinar.
Was passiert wenn ich Euro im US-amerikanischen oder einem indischen Format darstellen will?