Maskieren bzw Formatieren des Ausdrucks einer Single-Variable

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • 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 wrote:

      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)

      Source Code

      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
      Display All
    • Hi @Jogi,
      (hatte die Antwort schon vor einer Weile erstellt, dann aber aus irgendeinem Grund nicht auf "Absenden" gedrückt ...)


      Jogi wrote:

      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!