seppel: VBScript - nur die Nachkommastellen anzeigen

Hallo zusammen,

ich weiss Nachkommastellen sind schon oft diskutiert worden und es gibt Funktionen wie Round() und FormatNumber(), die einem eine Zahl auf die gewünschten Stellen formatiert bzw. rundet.

Ich suche jedoch vergeblich nach einer Möglichkeit mir 1. die Anzahl der Stellen und 2. die Stellen selbst ausgeben zu lassen.

z.B.:
10.83  ->  2 Stellen und 83
8.123  ->  3 Stellen und 123

Sinn dieser Übung ist bei Bestellungen automatisch unter die Anzahl (in meinem Fall Anteile) etwas in folgender Art schreiben zu können: 10.83 (83/100 fractions) und 8.123 (123/1000 fractions)

Gibt es hier eine Funktion? Oder muss man das zu Fuss machen...z.B. so:
_array = split(_zahl,".")  ' aufteilen
len(_array(1))             ' Anzahl Stellen
_array(1)                  ' Stellen

natürlich müsste man hier erst prüfen ob überhaupt Nachkommastellen vorhanden sind...finde ich nicht so schön die Lösung...

Vielen Dank schon mal,
Seppel

  1. Hallo seppel,

    natürlich müsste man hier erst prüfen ob überhaupt Nachkommastellen vorhanden sind...finde ich nicht so schön die Lösung...

    Ich habe zwar keine Ahnung, wie eine Modulo-Operation in VBScript von der Syntax her aussieht, aber wenn du den Rest einer Division durch eins ermittelst (Modulo 1) solltest du die Nachkommastellen erhalten. Wenn du die Ziffern dann in einen String umwandelst gibt es in VBScript bestimmt auch eine Möglichkeit, dessen Länge zu ermitteln.

    Gruß Gernot

    1. Hi Gernot,

      danke für die Antwort und Modulo war auch mein erster Versuch. Aber "5.3 mod 1" ergibt blöder Weise 0 in VBScript...hier wird zum naheliegensten IntegerWert gerundet. (siehe hier)

      Gruss,
      Seppel

    2. Hallo Gernot,

      Ich habe zwar keine Ahnung, wie eine Modulo-Operation in VBScript von der Syntax her aussieht, aber wenn du den Rest einer Division durch eins ermittelst (Modulo 1) solltest du die Nachkommastellen erhalten.

      eher unwahrscheinlich, da die modulo-Operation in den meisten Programmiersprachen nur für Integer-Operanden definiert ist und im Zweifelsfall einen impliziten Typecast bewirkt.

      Um den Nachkommaanteil von x zu erhalten, muss man daher meistens den ganzzahligen Anteil von x abziehen. In Pseudocode also:

      frac(x) = x - int(x)

      Freundlicherweise bieten einige Programmiersprachen auch von Haus aus schon eine Funktion an, die den Nachkommaanteil von float-Werten liefert.

      So long,
       Martin

      --
      Ist die Katze gesund,
      freut sich der Hund.
      1. Hi Martin,

        frac(x) = x - int(x)

        das war mein Versuch Nr. 2 - mit dem Ergebnis immer 15 Nachkommastellen zu bekommen. z.B. 43.3 - 43 ergibt 0.299999999999997 (auch wenn ich die Werte direkt einsetze) Seltsame Sache, aber ohne zu wissen wieviel Stellen es gibt kann man dieses blödsinniege Ergebnis ja auch nicht runden.

        Freundlicherweise bieten einige Programmiersprachen auch von Haus aus schon eine Funktion an, die den Nachkommaanteil von float-Werten liefert.

        Das ist wonach ich gesucht habe...

        Habe es jetzt so gelöst:

          
        If instr(x,".") <> 0 Then  
            z = split(x,".")  
            y = 1  
            do until len(y) = len(z(1))+1  
                y = y & "0"  
            loop  
            fractions = int(z(1)) & "/" & y  
        Else  
            fractions = 0  
        End If  
        
        

        Seppel

        1. Hi Seppel,

          If instr(x,".") <> 0 Then
              z = split(x,".")
              y = 1
              do until len(y) = len(z(1))+1
                  y = y & "0"
              loop
              fractions = int(z(1)) & "/" & y
          Else
              fractions = 0
          End If

            
          kannst auch mal die Version testen:  
            
          ~~~javascript
            
          a = 4.854  
          b = (a - Int(a))  
          b = b * 10 ^ (Len(b) - 2)  
          MsgBox b  
          
          

          Viele Grüße

          Jörg

      2. Hallo Martin,

        Ich habe zwar keine Ahnung, wie eine Modulo-Operation in VBScript von der Syntax her aussieht, aber wenn du den Rest einer Division durch eins ermittelst (Modulo 1) solltest du die Nachkommastellen erhalten.

        eher unwahrscheinlich, da die modulo-Operation in den meisten Programmiersprachen nur für Integer-Operanden definiert ist und im Zweifelsfall einen impliziten Typecast bewirkt.

        Na da lob ich mir doch Javascript, da ist das kein Problem und ich erhalte bei einer Modulo-Operation durch eins immer die Nachkommastellen des ersten Operanden mit "0." davor.

        Naja, mit den üblichen Rechenungenauigkeiten, die aus der Umwandlung zwischen Binär und Dezimal herrühren:

        alert(10.1 % 1) -> Ausgabe: 0.09999999999999964

        alert(1.1 % 1) -> Ausgabe: 0.10000000000000009

        ;-)

        Gruß Gernot