Humanic: Frage zum Wiki-Artikel ‚JavaScript‘

Ich habe eine kurze und hoffentlich einfach umzusetzende Frage.

Und zwar habe ich eine Kommazahl und möchte nur die Länge der Ganzzahl daraus haben.

D.h. die Zahl ist z.B. 142,14547 und ich möchte, dass später die Zahl "3" ausgegeben wird. Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!

kann mir jmd behilflich sein?

LG

  1. Liebe(r) Humanic,

    Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!

    Code?

    Liebe Grüße,

    Felix Riesterer.

    1. Liebe(r) Felix,

      Code?

      will mal nicht so sein: parseFloat("142,14547").toString().length

      Liebe Grüße,

      Felix Riesterer.

      1. Hallo,

        will mal nicht so sein: parseFloat("142,14547").toString().length

        Wobei hier parseFloat nur zufällig das richtige Ergebnis im Sinne der Aufgabe erzeugt!

        Gruß
        Kalk

    2. Liebe(r) Humanic,

      Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!

      Code?

      Liebe Grüße,

      Felix Riesterer.

      function nachkommastellenermitteln(nachkommastellevalue) { varlaengezahl = parseFloat(nachkommastellevalue); laengezahl = toString(varlaengezahl).length; console.log(nachkommastellevalue); console.log(varlaengezahl); console.log(laengezahl); }

      das problem hierbei ist jedoch, dass wenn Nachkommastellevalue = 102,1457 ist, dass langezahl = 18 ist, ich möchte aber, dass laengezahl eben 3 ist (durch "102" bedingt)

  2. @@Humanic

    Und zwar habe ich eine Kommazahl und möchte nur die Länge der Ganzzahl daraus haben.

    Der Logarithmus ist dein Freund. Und da es um Zahlen im Dezimalsystem geht, der Logarithmus zur Basis 10.

    Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln

    Das wird wohl nichts. parseFloat() wandelt einen String in eine Zahl um, nicht andersrum.

    Aber wie gesagt, die Umwandlung in eine Zeichenkette ist nicht das Mittel der Wahl.

    LLAP 🖖

    -- “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
    Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
  3. Hallo,

    Und zwar habe ich eine Kommazahl und möchte nur die Länge der Ganzzahl daraus haben.

    also die Anzahl der Vorkommastellen? Dann ist der dekadische Logarithmus (also der Logarithmus zur Basis 10) das Mittel der Wahl. Der ist nämlich immer um 1 weniger als die Stellenzahl, solange das Argument positiv und größer oder gleich 1 ist.

    Also:

    var stellen = Math.floor(Math.log(x) / Math.LN10) + 1;

    Wie gesagt: Für Werte kleiner 1 gilt das nicht mehr, aber das kratzt dich vermutlich nicht.

    Probiert habe ich das ganze schon, die Zahl mit parseFloat umzuwandeln, und anschließend aus diesem Variablenwert mit ".length" die Länge herauszubekommen, tja... und da ist das Problem... statt die Länge des Variablenwertes zu nehmen, nutzt ".length" den Variablennamen!

    Äh, nö. Ich bin mir ziemlich sicher, dass du hier die falschen Schlüsse ziehst.

    So long,
     Martin

    -- Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
    - Douglas Adams, The Hitchhiker's Guide To The Galaxy
    1. @@Der Martin

      var stellen = Math.floor(Math.log(x) / Math.LN10) + 1;

      Hach, dass die Leute immer gleich die fertige Lösung rausposaunen müssen!

      Math.log(x) / Math.LN10 ist aber doch ein bisschen zu kompliziert; Math.log10(x) exitiert.

      Wie gesagt: Für Werte kleiner 1 gilt das nicht mehr, aber das kratzt dich vermutlich nicht.

      Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.

      LLAP 🖖

      -- “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
      Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|

      Folgende Nachrichten verweisen auf diesen Beitrag:

      1. n'Abend,

        var stellen = Math.floor(Math.log(x) / Math.LN10) + 1;

        Hach, dass die Leute immer gleich die fertige Lösung rausposaunen müssen!

        ja, manchmal blubbert es einfach so aus mir raus ... *rülps* ;-)

        Math.log(x) / Math.LN10 ist aber doch ein bisschen zu kompliziert; Math.log10(x) exitiert.

        Oh, cool. Das wusste ich noch nicht.

        Wie gesagt: Für Werte kleiner 1 gilt das nicht mehr, aber das kratzt dich vermutlich nicht.

        Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.

        Wieso abfragen? Es gibt doch Math.abs(). Aber angesichts der Fragestellung habe ich vermutet, dass der Fall sowieso nicht relevant ist,

        So long,
         Martin

        -- Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
        - Douglas Adams, The Hitchhiker's Guide To The Galaxy
        1. @@Der Martin

          Hach, dass die Leute immer gleich die fertige Lösung rausposaunen müssen!

          ja, manchmal blubbert es einfach so aus mir raus ... *rülps* ;-)

          Passiert mir wohl auch manchmal. Das wäre aber für Humanic eine Gelegenheit gewesen, seine Kenntnisse zum Logarithmus wieder aufzufrischen.

          Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.

          Wieso abfragen?

          Ich sagte nicht „abfragen“.

          LLAP 🖖

          -- “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
          Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
          1. Hi,

            Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.

            Wieso abfragen?

            Ich sagte nicht „abfragen“.

            oh ... das war die Simultan-Autokorrektur beim Lesen. Die ist auch nicht vollkommen. Aber manchmal vollkommen überraschend.

            Ciao,
             Martin

            -- Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
            - Douglas Adams, The Hitchhiker's Guide To The Galaxy
        2. Hallo Der Martin,

          Vor allem für Werte kleiner 0 nicht. Und das dürfte kratzen. Das sollte man vorher abfangen.

          Wieso abfragen? Es gibt doch Math.abs().

          Damit wäre es ja abgefangen ;-)

          Aber angesichts der Fragestellung habe ich vermutet, dass der Fall sowieso nicht relevant ist,

          „Ich habe eine Kommazahl“?? Die kann doch auch negativ sein?

          Bis demnächst
          Matthias

          -- Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    2. [Vollzitat entfernt]

      ach hätte ich doch damals während der Schulzeit in Mathe bei Logarithmus besser aufgepasst.... danke an alle, für die Lösung! Es funktioniert :)

    3. Hallo Der Martin,

      also die Anzahl der Vorkommastellen? Dann ist der dekadische Logarithmus (also der Logarithmus zur Basis 10) das Mittel der Wahl. Der ist nämlich immer um 1 weniger als die Stellenzahl, solange das Argument positiv und größer oder gleich 1 ist.

      Die Formulierung stimmt so nicht.

      Es wird impliziert, dass der Logarithmus immer eine natürliche Zahl ist. Du meinst den ganzzahligen Anteil des Logarithmus.

      parseInt(Math.log10(Math.abs(x))) + 1 sollte für alle Varianten das richtige Ergebnis liefern:

      console.log(parseInt(Math.log10(Math.abs( 5.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( 0.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( -0.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( -5.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs(-15.5))) + 1) // 2

      Bis demnächst
      Matthias

      -- Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
      1. Moin,

        also die Anzahl der Vorkommastellen? Dann ist der dekadische Logarithmus (also der Logarithmus zur Basis 10) das Mittel der Wahl. Der ist nämlich immer um 1 weniger als die Stellenzahl, solange das Argument positiv und größer oder gleich 1 ist.

        Die Formulierung stimmt so nicht.

        Es wird impliziert, dass der Logarithmus immer eine natürliche Zahl ist. Du meinst den ganzzahligen Anteil des Logarithmus.

        logisch, das sollte beim Begriff "Anzahl der Stellen" eigentlich klar sein. Und deswegen hatte ich dem Code-Beispiel ja auch einen Fußboden spendiert.

        parseInt(Math.log10(Math.abs(x))) + 1 sollte für alle Varianten das richtige Ergebnis liefern:

        Außer für abs(x)<1, aber dann muss man sich sowieso fragen, wie man die Zahl der Vorkommastellen definieren möchte. Grundsätzlich 1? Wäre zwar richtig, aber nicht unbedingt nützlich. Da kommt es darauf an, wozu man diesen Wert verwenden will.
        Ich hatte diese Aufgabenstellung schon oft, um herauszubekommen, in welcher Größenordnung ein Wert liegt, also ob Millionen, Tausende oder gar Hundertstel. Dann wären auch die begativen Werte, die die genannte Formel für x<1 liefert, noch sinnvoll.

        So long,
         Martin

        -- Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
        - Douglas Adams, The Hitchhiker's Guide To The Galaxy
        1. Hallo Martin,

          Außer für abs(x)<1,

          ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)

          Gruß
          Jürgen

          1. Hallo JürgenB,

            Außer für abs(x)<1,

            ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)

            Ähem. Hat die Autokorrektur da eine Null hingezaubert?

            Bis demnächst
            Matthias

            -- Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
            1. Hallo Matthias,

              Außer für abs(x)<1,

              ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)

              Ähem. Hat die Autokorrektur da eine Null hingezaubert?

              ja, in meinem Kopf :(. Ich glaube, ich muss zum wachwerden erst mal ein bischen arbeiten …

              Gruß
              Jürgen

              1. Hallo JürgenB,

                Außer für abs(x)<1,

                ich glaube, dieser Fall wird definitionsgemäß nie eintreten :)

                Ähem. Hat die Autokorrektur da eine Null hingezaubert?

                ja, in meinem Kopf :(.

                Tröste dich, ich wollte auch dasselbe schreiben ;-)

                Ich glaube, ich muss zum wachwerden erst mal ein bischen arbeiten …

                Ich auch …

                Bis demnächst
                Matthias

                -- Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        2. @@Der Martin

          begativen

          Sie meinten: vegetativ?

          LLAP 🖖

          -- “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
          Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
      2. Hallo Matthias,

        console.log(parseInt(Math.log10(Math.abs( 5.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( 0.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( -0.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs( -5.5))) + 1) // 1 console.log(parseInt(Math.log10(Math.abs(-15.5))) + 1) // 2

        probier mal

        console.log(parseInt(Math.log10(Math.abs( 0.05))) + 1);

        ich denke, abs reicht nicht, man sollte schon >=1 abfragen.

        Gruß
        Jürgen

        1. Hallo JürgenB,

          probier mal

          console.log(parseInt(Math.log10(Math.abs( 0.05))) + 1);

          Brauch ich nicht <stirnklatsch>

          ich denke, abs reicht nicht, man sollte schon >=1 abfragen.

          In der Tat.

          Bis demnächst
          Matthias

          -- Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.

          Folgende Nachrichten verweisen auf diesen Beitrag:

      3. @@Matthias Apsel

        parseInt(Math.log10(Math.abs(x))) + 1

        Wieso parseInt(), wenn das Argument schon eine Zahl ist? Math.floor() sollte es tun.

        LLAP 🖖

        -- “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
        Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|