German Anderes Format für Zahlen

Discussion in 'German Forum' started by JOTHA, Oct 16, 2008.

  1. JOTHA

    JOTHA Well-Known Member Licensed User

    Ich habe mal eine kurze Frage:

    Wie kann ich das Zahlenformat "eindeutschen"?

    Bsp:

    Die Zahlen kommen in diesem Format:

    1,000,000.99

    Ich hätte die Zahlen aber gerne in diesem Format:

    1.000.000,99

    Wie kann ich das bewerkstelligen?

    Im voraus besten Dank!
     
  2. klaus

    klaus Expert Licensed User

    Direkte Function oder Möglichkeit kenne Ich keine.
    Aber mit dieser kleinen Routine geht es.
    Code:
    Sub Globals
      
    'Declare the global variables here.
      a=123456789.5678
    End Sub

    Sub App_Start
      Form1.Show
      Label1.Text=a
      Label2.Text=Convert(a,
    2)
    End Sub

    Sub Convert(Zahl,Dezimalstellen)
      Zahl=Format(Zahl,
    "N"&Dezimalstellen)
      b=StrReplace(Zahl,
    ".","!")  ' ändert vorläufig die Punkte
      b=StrReplace(b,",",".")     ' tauscht Kommas in Punkte aus
      b=StrReplace(b,"!",",")     ' tauscht Punkte in Kommas aus
      Return b
    Return
    Beste Grüsse.
     
  3. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo Klaus,

    schön, wieder von Dir zu hören und Danke für deine schnelle Antwort!

    ... sieht ja ganz schön kompliziert aus, ich probiere es aber trotzdem mal aus.

    ... melde mich dann wieder, wenn es geklappt hat.
     
  4. specci48

    specci48 Well-Known Member Licensed User

    Hallo Paulsche,

    leider gibt es in Basic4ppc keine eingebaute Funktion zur Umwandlung von Zahlen in andere Schreibweisen. Der Format-Befehl bereitet auch "nur" das englische Format auf. :(

    Ich selbst habe das daher bei mir immer mit folgender Hilfsmethode gelöst:
    Code:
    Sub ConvertToGerman(value)
       value = StrReplace(value,
    ",","#")
       value = StrReplace(value,
    ".",",")
       
    Return StrReplace(value,"#",".")
    End Sub
    Statt
    Code:
    Label1.Text = ausgangswert
    muss man dann
    Code:
    Label1.Text = ConvertToGerman(ausgangswert)
    verwenden.

    Das ist allerdings nur bei reinen Ausgabefeldern sinnvoll, da man anschliessend mit den konvertierten Feldern z.B. nicht mehr weiterrechnen kann.


    Gruß
    specci48
     
  5. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo specci48,

    vielen Dank auch an deine Adresse!

    leider habe ich aber diverse "Problemchen" mit der neuen Version 6.50.
    Ich habe gleich mal das mit den Modulen ausprobiert, aber ich kann natürlich die
    "App_Start"-Zeile von Klaus nicht in einem der Module verwenden.

    Da müßte ich jetzt wahrscheinlich irgendwelche Verweise einfügen.

    Ich hatte schon einige Experimente gebraucht, bis ich rausgefunden habe, wie man Verweise nur zum Aufruf von Seiten, die in den Modulen waren machen konnte.

    Auf jeden Fall werde ich auch deine Hilfestellung ausprobieren und mich dann wieder melden.

    DANKE.
     
    Last edited: Oct 16, 2008
  6. specci48

    specci48 Well-Known Member Licensed User

    @Klaus: :sign0013: aber ich war ein wenig langsam mit meiner Antwort und haben wir uns dann wohl überschnitten...
    Positiv zu bemerken ist, dass wir im Prinzip beide eine identische Lösung verwenden. :)


    Gruß
    specci48
     
  7. klaus

    klaus Expert Licensed User

    Hallo JOTHA,
    Die 2 Zeilen in der AppStart Routine können auch anderwo sein, also auch in einem Modul.
    Die Convert Routine könnte auch in einem Modul sein, nur muss sie als Public gekennzeichnet werden. Und für den Aufruf muss dann der Modulname mit einem Punkt davor gesetzt werden Modul1.Convert.

    Hallo specci48,
    Ja die Lösung die gleiche. Ich habe in meine Routine noch das Format eingebunden um auch die Kommas im Englischen Format reinzubekommen.

    Beste Grüsse.
     
  8. JOTHA

    JOTHA Well-Known Member Licensed User

    Es funzt jetzt!

    Hallo Klaus und specci48,

    dank eurer Hilfe bin ich jetzt nach vielen Experimenten auf den Trichter gekommen. Anbei jetzt mein Beispiel, damit auch andere was davon haben.

    Allerdings funktioniert es noch einfacher als von euch beschrieben:

    1) @Klaus:
    Habe ich nicht gemacht -> es funzt trotzdem ...

    2) @Klaus:
    Habe ich bei meinen Modulen nicht gemacht (nicht in diesem angehängten Beispiel) -> es funzt trotzdem ...

    3) @specci48:
    Vielen Dank für diesen wichtigen Hinweis!
    Wenn ich also einmal mit Zahlen rechnen muß, dann nehme ich nicht die "konvertierte" Zahl, sondern ich schreibe die echte Zahl in ein unsichtbares Feld und rechne von da aus weiter.

    4) Noch eine Frage an Klaus:
    In deinem Code steht unten 2 mal "Return"
    Code:
    Sub Convert(Zahl,Dezimalstellen)
      Zahl=Format(Zahl,
    "N"&Dezimalstellen)
      b=StrReplace(Zahl,
    ".","!")  ' ändert vorläufig die Punkte
      b=StrReplace(b,",",".")     ' tauscht Kommas in Punkte aus
      b=StrReplace(b,"!",",")     ' tauscht Punkte in Kommas aus
      Return b
    Return
    Ich habe das letzte "Return" gelöscht, es funzt trotzdem. Für was ist das nützlich?
    ... und dann müßte da auch noch ein "End Sub" dran, oder? ;)

    Vielleicht mache ich ja einen Denkfehler und auch die "Public"-Verweise und "Global"-Angaben sind am Ende doch noch sehr wichtig?

    Schaut euch doch bitte mal das kleine Beispiel nochmal an und sagt mir, ob ich auf dem Holzweg bin ...

    Auf jeden Fall wollte ich mich nochmals bei euch beiden herzlich bedanken, denn ohne eure Hilfe wäre ich da nicht weitergekommen! :sign0188:
     

    Attached Files:

    Last edited: Oct 19, 2008
  9. specci48

    specci48 Well-Known Member Licensed User

    Ehrlich gesagt, Deine Variante ist komplett identisch zu der von Klaus. Ich habe "nur" auf die Aufbereitung von zwei Nachkommastellen verzichtet.

    Das kann eigentlich nicht sein. Hast Du die Convert-Methode etwa in jedes Modul kopiert? Dann geht es natürlich ohne Public-Deklaration und ohne Modulname. Interessant ist aber gerade die Variante, eine Sub nur ein einziges mal in einem einzigen Modul zu pflegen.

    Für nichts, denn es ist genau genommen ein Fehler...

    Aber sicher!


    Gruß
    specci48
     
  10. JOTHA

    JOTHA Well-Known Member Licensed User

    So war es ja auch nicht gemeint. Wie gesagt: ohne Euch hätte ich das sowieso nicht geschafft ...

    Ich meinte nur das mit den "Public", "Modul", etc.-Verweisen.

    Aber jetzt weiß ich ja, für was die sind:
    ... genau, ich habe die in jedes Modul kopiert ...
    Aber so, wie Ihr das macht ist es natürlich intelligenter!

    Ich lerne halt noch.

    Danke nochmals!
     
  11. specci48

    specci48 Well-Known Member Licensed User

    War auch nicht böse gemeint, aber ich habe einfach den Unterschied nicht gesehen...:sign0013:

    Wir auch! Gerade in Bezug auf die neue Modultechnik sind wir (mit Ausnahme der Beta-Tester) alle wieder Anfänger. Daher immer hübsch weiterfragen, denn oftmals freut man sich auch beim Suchen, dass eine Frage schon vorab gestellt und bereits beantwortet wurde.


    Gruß
    specci48
     
  12. klaus

    klaus Expert Licensed User

    Hallo Ihr Beiden.
    War ein Paar Tage weg, bin jetzt wieder zurück.

    Klar ist das zweite Return ein FEHLER und muss mit durch ein End Sub ersetzt werden.
    Das war wahrscheinlich ein ganz alter Basic Reflex von mir von früher.
    Komischerwieser funktioniert es aber.

    Beiliegend Dein Beispiel mit der Konvertierungsroutine in einem andern Modul so wie Ich es meinte.

    specci48, Du hast vollkommen Recht wir lernen Alle noch und speziell mit Fragen und Antworten von Anderen. Ich (wir) mache(n) auch manchmal noch Fehler. Das ist ja auch der Grund und Vorteil dieses Forum's.

    Beste Grüsse.
     

    Attached Files:

  13. specci48

    specci48 Well-Known Member Licensed User

    Nicht so geizig... ;)
    Die Datei Routinen.bas musst Du uns natürlich auch noch zur Verfügung stellen! :signOops:

    Gruß
    specci48
     
  14. klaus

    klaus Expert Licensed User

    Hier ist sie !

    Grüsse
     

    Attached Files:

  15. JOTHA

    JOTHA Well-Known Member Licensed User

    ... und was heißt jetzt "Public Sub"?

    ... daß diese Sub für alle Module gilt?

    :confused:
     
  16. klaus

    klaus Expert Licensed User

    Genau !

    Variablen und Routinen können in jedem Modul definiert werden.
    Wenn sie nur in dem Modul, wo sie definiert worden sind, genützt werden sollen gilt die 'normale' Definition wie es bis jetzt war oder man kann auch für Variablen Dim durch Private ersetzen und für Routinen Private vor Sub eingeben.
    Für Variablen und Routinen die von auswärts des Moduls, wo sie definiert worden sind, genützt werden sollen muss das Wort Private durch Public esrsetzt werden oder eingefügt werden mit den gleichen Regeln wie für das Wort Private.
    Um diese Variablen und Routinen von auswärts aufrufen zu können muss man den Variablen- und Routinennamen den Modulnamen mit einem Punkt davor setzten.

    Du kannst auch hier mal reinschauen, das ist eine Übersetzung vom Englischen Erklärungstext über die Neuerungen in der Vesrion 6.50 von BasicPPC.
    http://www.basic4ppc.com/forum/german-forum/3132-neue-version-6-5-a.html

    Grüsse.
     
  17. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo Klaus,

    DANKE für die gute Erklärung.

    In den thread mit der deutschen Erklärung der Neuerungen in 6.5 für Paulsche habe ich schon vorher reingeschaut.

    Eigentlich könnte man ja dann für alle Subs den Begriff "Public" davorstellen. Wenn man die Sub nicht benötigt, braucht man ja nicht darauf zugreifen, oder?
     
  18. klaus

    klaus Expert Licensed User

    Hallo JOTHA,

    Eigentlich hast Du Recht.
    Denn mehrere Routinen mit gleichem Namen in verschiedenen Modulen, haben von aussen gesehen verschiedene Namen durch den Modulnamen den man voran setzten muss.
    Für eine 'saubere' Programmierung schlage Ich aber vor anstatt Public, Private vorzusetzten wenn die Routine nur im gleichen Modul verwendet wird, und nicht Public oder nichts. Das garantiert eine bessere Verkapselung.

    Ich kenne diese Public und Private Keywords von VisualBasic, wo es etwas anders funktioniert. Eine Routine die public benannt wird, behält Ihren Namen ohne dem Modulnamen, auch von aussen, das heisst dass zwei Routinen mit gleichem Namen beide nicht als public benannt werden können. Das gleiche gilt auch für Variablen.

    Beste Grüsse.
     
  19. JOTHA

    JOTHA Well-Known Member Licensed User

    ... wieder was dazugelernt!
    ;)
     
  20. Paulsche

    Paulsche Well-Known Member Licensed User

    Hi, muss das Thema nochmals aufgeifen.

    Ich schreib gerade ein Prog zum Benzinverbrauch und hab folgende Probleme:

    Mit dem hier beschriebenen Convertierungs-SUB kann ich ja die Anzeige ins Deutsche Format konvertieren, aber nicht die Eingabe der Daten im deutschen Format vornehmen, richtig ?

    Denn wenn ich meine CSV-Tabelle im Excel öffne, wird mir der Kilometerstand nicht als 50.000 sondern als 50 angezeigt.

    Dies denke ich kann ich nur damit lösen, dass ich einen extra CSV-Export für die Excel-Ausgabe erstelle, wo ich beim Export die ganzen Cellen convertiere, richtig ?

    Kann ich irgendwie gestalten, dass die Eingabe im deutschen Format erfolgen kann oder geht das nicht ? Ich muss halt mit den Cellen auch rechnen können.
    Ansonsten müsste ich halt irgenwie verhindern dass im deutschen Format eingegeben werden kann.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice