Maskieren bzw Formatieren des Ausdrucks einer Single-Variable

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Maskieren bzw Formatieren des Ausdrucks einer Single-Variable

      Ich verzweifle gerade: ich möchte eine Single Variable, die zB einen Wert von 999.90006 oder aber auch einen solchen von 0.99990006 auf VIER Stellen ausdrucken.
      Mit Fusing() meine ich nicht weiterzukommen, da hier nur die Anzahl der Nachkommastellen definiert werden können. Es geht mir ja aber um die Gesamtstellen.
      Ich habe auch versucht, einen Hilfsstring H zu definieren mit "Dim H as String*5" , weil ich hoffte, es würden dann inklusive des Kommas/Punktes immer genau die ersten fünf Stellen/Zeichen der Single-Variable übernommen.
      Passiert aber so nicht. Mit "Print H" werden trotzdem munter massenhaft Stellen zur seriellen Ausgabe befördert. Nach fünf Nachkommastellen ist allerdings ein " in der Ausgabe, bevor noch weitere Nachkommastellen kommen. Da ich die Single testweise selbst vorgegeben habe (309.6) sehe ich außerdem, daß die Umwandlung in den String "unnötigerweise ungenau" ist, denn der resultierende String lautet 309.60000"102 . Was hält man denn nun davon?
      Muß ich wirklich händisch jede Stelle "abfragen" und mir mit lauter if then's meine gewünschten 4 Stellen zusammenbasteln? Oder geht Fusing auch mit "charakteristischen Stellen" statt nur Nachkommastellen?
      Danke, Lars
    • laase schrieb:

      Ich verzweifle gerade: ich möchte eine Single Variable, die zB einen Wert von 999.90006 oder aber auch einen solchen von 0.99990006 auf VIER Stellen ausdrucken.
      Mit Fusing() meine ich nicht weiterzukommen, da hier nur die Anzahl der Nachkommastellen definiert werden können. Es geht mir ja aber um die Gesamtstellen.
      Ich habe auch versucht, einen Hilfsstring H zu definieren mit "Dim H as String*5" , weil ich hoffte, es würden dann inklusive des Kommas/Punktes immer genau die ersten fünf Stellen/Zeichen der Single-Variable übernommen.
      Passiert aber so nicht. Mit "Print H" werden trotzdem munter massenhaft Stellen zur seriellen Ausgabe befördert. Nach fünf Nachkommastellen ist allerdings ein " in der Ausgabe, bevor noch weitere Nachkommastellen kommen. Da ich die Single testweise selbst vorgegeben habe (309.6) sehe ich außerdem, daß die Umwandlung in den String "unnötigerweise ungenau" ist, denn der resultierende String lautet 309.60000"102 . Was hält man denn nun davon?
      Muß ich wirklich händisch jede Stelle "abfragen" und mir mit lauter if then's meine gewünschten 4 Stellen zusammenbasteln? Oder geht Fusing auch mit "charakteristischen Stellen" statt nur Nachkommastellen?
      Danke, Lars
      Die Single Variable in einen String wandeln, dann mit Left die gewünschten Stellen extrahieren. (Siehe Codebeispiel)

      Quellcode

      1. 'Fusebit KLA987 = 110111
      2. $sim
      3. $regfile = "m1284pdef.dat"
      4. $crystal = 20000000
      5. $baud = 19200
      6. Dim A As String * 20
      7. Dim B As Single
      8. B = 45.657778
      9. A = Str(b)
      10. A = Left(a , 5)
      11. Print A
      Alles anzeigen
    • Hi @Jogi,
      (hatte die Antwort schon vor einer Weile erstellt, dann aber aus irgendeinem Grund nicht auf "Absenden" gedrückt ...)


      Jogi schrieb:

      mit Left die gewünschten Stellen extrahieren

      cool! Genau DAS suchte ich! Danke!
      @Michael: Ja, es geht mathematisch betrachtet zwar um die 4 Stellen, also zB 999.9, 99.99, 9.999 usw, aber der Breite des Ausdrucks geschuldet hätte ich doch gern immer exakt 5 alphanumerische Zeichen, würde mich also ab 0.999 notgedrungen mit nur noch 3 Stellen begnügen. Genau diese Maskierung scheint der von Jogi beschriebene Befehl Left(Str,x) zu machen.
      Update: hab's gleich ausprobiert und funktioniert wunderbar!