ebody: substr() - Wenn der String kürzer ist als length, Restliche freie Stellen mit Zeichen auffüllen

Hallo,

ist es über einen Parameter von substr() möglich, die restlichen 6 freien Stellen z.b. mit 0 aufzufüllen? Oder gibt es eine Alternative Methode zu substr() die das erfüllt?

const str = '1234';
const change = str.substr(0, 10);
console.log(change); // 1234

Gruß ebody

  1. @@ebody

    ist es über einen Parameter von substr() möglich, die restlichen 6 freien Stellen z.b. mit 0 aufzufüllen? Oder gibt es eine Alternative Methode zu substr() die das erfüllt?

    Na schauen wa mal, was es so für Stringfunktionen gibt.

    1. in MDN nach „String“ gesucht → String

    2. Links in der Liste die Funktionen durchgeschaut; bei unbekannten mal draufgeclickt, um die Erklärung zu lesen → String.prototype.padEnd()

    🖖 Живіть довго і процвітайте

    --
    When the power of love overcomes the love of power the world will know peace.
    — Jimi Hendrix
    1. padEnd() erscheint im Hinblick auf die präsentierte Aufgabe als clevere Lösung. Da wir aber ebodys tatsächliche Aufgabe nur bruchstückhaft kennen sollte die folgende Warnung nicht vergessen werden:

      • '1234'.padEnd( 10, '0' ) liefert 1234000000.
      • '1234.0'.padEnd( 10, '0' ) liefert 1234.00000.

      Der Unterschied erscheint hier ist elefant-signifikant.

      Möglicherweise will @ebody ja etwas wie toFixed():

      * Number.parseFloat( '1234'   ).toFixed( 5 )
      * Number.parseFloat( '1234.0' ).toFixed( 5 )
      
      Das liefert identische '1234.00000'.
      
      1. padEnd() erscheint im Hinblick auf die präsentierte Aufgabe als clevere Lösung. Da wir aber ebodys tatsächliche Aufgabe nur bruchstückhaft kennen sollte die folgende Warnung nicht vergessen werden:

        • '1234'.padEnd( 10, '0' ) liefert 1234000000.
        • '1234.0'.padEnd( 10, '0' ) liefert 1234.00000.

        Der Unterschied erscheint hier ist elefant-signifikant.

        Möglicherweise will @ebody ja etwas wie toFixed():

        * Number.parseFloat( '1234'   ).toFixed( 5 )
        * Number.parseFloat( '1234.0' ).toFixed( 5 )
        
        Das liefert identische '1234.00000'.
        

        Und wenn ich schon dabei bin:

        Number.parseFloat('1.2340').toFixed( 8 ).substr( 0, 10 ) 
        → 1.23400000
        
        Number.parseFloat('1234.0').toFixed( 8 ).substr( 0, 10 ) 
        → 1234.00000
        
        Number.parseFloat('0.1234').toFixed( 8 ).substr( 0, 10 )
        → 0.12340000
        
        

        Vielleicht ist ja die Aufgabe, immer die gleiche Anzahl an Stellen zu präsentieren? Aber auch hier sei gewarnt: bei Zahlen >= 10000000000 versagt das so grandios wie Murphy vor der Einstellungskomission in Trainspotting. Bei negativen Zahlen ebenso - nur halt „etwas anders“.

        Da wären also Fallunterscheidungen zu treffen.

        Number.parseFloat('-1').toFixed( 8 ).substr( 0,10 )
        → -1.0000000  // Anzahl Stellen stimmt nicht.
        
        Number.parseFloat('12345678901').toFixed( 8 ).substr( 0, 10 )
        → 1234567890   // Ganz böse: Zahlenwert verändert
        
      2. Hallo,

        Möglicherweise will @ebody ja etwas wie toFixed():

        von Dezimalpunkten, Nachkommastellen und ähnlichem war nicht die Rede, das ist Spekulation deinerseits. Natürlich, es könnte sein, dass es eigentlich um die formatierte Ausgabe von Zahlen geht - die Frage drehte sich aber lediglich um das Auffüllen eines Strings mit einem bestimmten Zeichen. Die Tatsache, dass der Beispielstring nur Ziffern enthält, könnte ein Indiz dafür sein, dass es eigentlich um Zahlen geht. Es könnten aber ebensogut Bestellnummern oder sonst irgendwelche Codes sein, die eben auf eine feste Länge ergänzt werden sollen.

        * Number.parseFloat( '1234'   ).toFixed( 5 )
        * Number.parseFloat( '1234.0' ).toFixed( 5 )
        
        Das liefert identische '1234.00000'.
        

        Ja. Aber ebody hat in seinem Beispiel keinen Dezimalpunkt.

        Einen schönen Tag noch
         Martin

        --
        Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.
        1. Ja. Aber ebody hat in seinem Beispiel keinen Dezimalpunkt.

          https://forum.selfhtml.org/self/2022/aug/06/tolocalestring-nachkommastellen-nicht-runden/1800916#m1800916

          Ich vermute aber einen Zusammenhang - und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?

          1. und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?

            https://forum.selfhtml.org/cites/2544

            Einen schönen Tag noch
             Martin

            --
            Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.
            1. und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?

              https://forum.selfhtml.org/cites/2544

              Ich hatte angekündigt, dass ich spekuliere. Zitat:

              Da wir aber ebodys tatsächliche Aufgabe nur bruchstückhaft kennen sollte die folgende Warnung nicht vergessen werden:

              Ich verstehe nicht warum Du das kritisierst, denn nach meinem Ermessen gehört es nunmal hierher, neben aufscheinenden Problemen auch Lösungswege für vermutete, tatsächliche Aufgaben zu zeigen. Liegt es vielleicht gar nicht wirklich an meiner Antwort sondern an etwas, mit dem ich erweislich nichts zu tun habe?

              Im Beipackzettel meiner Glaskugel (die nicht aus Milchglas ist) steht übrigens, dass diese bei korrekter Verwendung oft richtige Ergebnisse zeigen wird. Nach meiner Erfahrung (und meinem Ermessen) stimmt das.

              1. Hallo,

                und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?

                https://forum.selfhtml.org/cites/2544

                Ich hatte angekündigt, dass ich spekuliere.

                ja, hattest du. Aber warum?

                Ich verstehe nicht warum Du das kritisierst, denn nach meinem Ermessen gehört es nunmal hierher, auch Lösungswege für vermutete, tatsächliche Aufgaben zu zeigen.

                Dann ist aber der meines Erachtens bessere Weg: Nicht vermuten, sondern rückfragen und den Fragesteller nicht gleich massenhaft mit Information überschütten. Dass ebody sich zu Rückfragen leider nicht äußert (auch im anderen Thread nicht), ist eine andere Baustelle.

                Liegt es vielleicht gar nicht wirklich an meiner Antwort

                Es liegt nicht an deiner konkreten Antwort, sondern an deiner grundsätzlichen Art und Weise, gleich Schillers gesamte Werke zu rezitieren, wenn jemand nach einer Glocke fragt. Weniger ist oft mehr!

                Anders gesagt: Ich kritisiere nicht die Qualität deiner Beiträge, sondern deren Umfang, der oft so weit über das eigentliche Thema hinausgeht, dass du die Leute damit wahrscheinlich eher verunsicherst als ihnen hilfst.

                sondern an etwas, mit dem ich erweislich nichts zu tun habe?

                Das Minus, das ich weiter unten kassiert habe, wofür auch immer?
                Nö, ich weiß ja, dass du als nicht registrierter Nutzer nicht voten kannst.

                Einen schönen Tag noch
                 Martin

                --
                Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.
                1. @@Der Martin

                  Das Minus, das ich weiter unten kassiert habe, wofür auch immer?

                  Für deinen unnötig komplizierten Vorschlag, wo es doch eine Methode gibt, die genau das Gewünschte tut?

                  🖖 Живіть довго і процвітайте

                  --
                  When the power of love overcomes the love of power the world will know peace.
                  — Jimi Hendrix
                  1. Hallo Gunnar,

                    kompliziert ist nicht das entscheidende Gegenargument. Eher der zu hohe Magieanteil.

                    Du hast padEnd vorgeschlagen, was man natürlich mit substr kombinieren muss weil man ja auch "zu lange" Strings behandeln muss. Bei padEnd hat man den Vorteil, das man beides gleichartig steuern kann, denn die Längenangabe von substr lässt sich 1:1 auf padEnd übertragen.

                    Bei Martin müsste man, wenn die Länge eine Variable ist, die nötige Anzahl an Nullen erstmal generieren. Wofür man dann wieder padEnd nehmen würde 😉. Oder man muss den maximalen Wert der Länge kennen und ein hinreichend langes Nullenliteral anpappen. Ahem. Nö.

                    Rolf

                    --
                    sumpsi - posui - obstruxi
                    1. @@Rolf B

                      Du hast padEnd vorgeschlagen, was man natürlich mit substr kombinieren muss weil man ja auch "zu lange" Strings behandeln muss.

                      Nein, muss man nicht. Es war die Rede davon, kurze Strings aufzufüllen, nicht davon, lange Strings abzuschneiden.

                      🖖 Живіть довго і процвітайте

                      --
                      When the power of love overcomes the love of power the world will know peace.
                      — Jimi Hendrix
                      1. Hallo ihr zwei,

                        Du hast padEnd vorgeschlagen, was man natürlich mit substr kombinieren muss weil man ja auch "zu lange" Strings behandeln muss.

                        Nein, muss man nicht. Es war die Rede davon, kurze Strings aufzufüllen, nicht davon, lange Strings abzuschneiden.

                        äh nee. Ja. Doch. Das Rausschneiden der ersten 10 Zeichen aus einem möglicherweise viel längeren String mit substr() war ja im Beispiel von ebody schon enthalten.

                        Einen schönen Tag noch
                         Martin

                        --
                        Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.
                        1. @@Der Martin

                          Nein, muss man nicht. Es war die Rede davon, kurze Strings aufzufüllen, nicht davon, lange Strings abzuschneiden.

                          äh nee. Ja. Doch.

                          Immer noch nein.

                          Das Rausschneiden der ersten 10 Zeichen aus einem möglicherweise viel längeren String mit substr() war ja im Beispiel von ebody schon enthalten.

                          Weil ebody dachte, damit dem Ziel näherzukommen. Nur deshalb war das im Code, in der Problembeschreibung war nichts dergleichen.

                          🖖 Живіть довго і процвітайте

                          --
                          When the power of love overcomes the love of power the world will know peace.
                          — Jimi Hendrix
                  2. @@Gunnar Bittersmann

                    Das Minus, das ich weiter unten kassiert habe, wofür auch immer?

                    Für deinen unnötig komplizierten Vorschlag, wo es doch eine Methode gibt, die genau das Gewünschte tut?

                    Ich habe wenig Verständnis dafür, dass jemand die Bewertung neutralisiert hat. IMHO sollten die Bewertungen dem Fragenden einen Hinweis geben, welche der gegebenen Antworten gut und welche weniger gut sind.

                    Wenn gute Antworten nicht positiv bewertet werden und weniger gute nicht negativ, entfällt der Sinn der Bewertungsfunktion. Die Bewertungsfunktion verkommt hier immer mehr zu reinen Sympathiebekundungen.

                    🖖 Живіть довго і процвітайте

                    --
                    When the power of love overcomes the love of power the world will know peace.
                    — Jimi Hendrix
                    1. Hallo Gunnar,

                      ich stimme Dir bei, dass Martins Idee nicht zu empfehlen ist. Ich habe zwar auch schon genau solchen Code erstellt, aber das war zu Zeiten und mit Sprachen, die keine Funktion für's Padding hatten (oder wo die CPU-Leistung in KIPS gemessen wurde und die String-Repeat-Funktion zu teuer war - also zu meinen Schulzeiten[1]).

                      Ich stimme Dir auch bei, dass die Bewertungsfunktion oft nicht so genutzt wird, wie sie es sollte.

                      Deine Einschätzung über ebodys Anliegen teile ich nicht, aber das hilft ja nichts und deswegen kann man keine + oder - setzen. Hier müsste sich ebody äußern und seinen Anwendungsfall darstellen.

                      Ich persönlich käme nicht auf die Idee, ein Auffüllen mit substr in Verbindung bringen zu wollen.

                      Rolf

                      --
                      sumpsi - posui - obstruxi

                      1. Und wenn jetzt einer fragt, was die Iten des Schulze sind... 😉 ↩︎

                      1. Hallo,

                        Ich persönlich käme nicht auf die Idee, ein Auffüllen mit substr in Verbindung bringen zu wollen.

                        ich auch nicht, aber so wie ich die Anforderung verstanden habe, ging es ja zunächst ums Begrenzen auf 10 Zeichen - daher das substr(). Erst dann ist ebody eingefallen, hey, was ist, wenn der String von vornherein schon kürzer ist?

                        Einen schönen Tag noch
                         Martin

                        --
                        Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.
                        1. Hallo

                          Ich persönlich käme nicht auf die Idee, ein Auffüllen mit substr in Verbindung bringen zu wollen.

                          ich auch nicht, aber so wie ich die Anforderung verstanden habe, ging es ja zunächst ums Begrenzen auf 10 Zeichen - daher das substr(). Erst dann ist ebody eingefallen, hey, was ist, wenn der String von vornherein schon kürzer ist?

                          Unabhängig von der Frage, ob dein Lösungsansatz gut ist oder nicht, möchte ich dir in deiner Interpretation der Ausgangsfrage beipflichten. Mir ist nicht klar, wie die Frage „ist es über einen Parameter von substr() möglich, die restlichen 6 freien Stellen z.b. mit 0 aufzufüllen?“ im Zusammenhang mit der Vorbelegung der Variable (const str = '1234';, also einem String kürzer als der [edit]mutmaßlichen[/edit] Ziellänge von 10 Zeichen) einen anderen Schluss zulassen könnte.

                          Tschö, Auge

                          --
                          200 ist das neue 35.
                          1. @@Auge

                            … möchte ich dir in deiner Interpretation der Ausgangsfrage beipflichten.

                            Wir sehen, schlecht es ist, wenn die Problembeschreibung so verfasst ist, dass sie verschieden interpretiert werden kann. Da hat dann nicht @Der Martin, sondern ebody den Minuspunkt verdient?

                            🖖 Живіть довго і процвітайте

                            --
                            When the power of love overcomes the love of power the world will know peace.
                            — Jimi Hendrix
                            1. Hi,

                              Da hat dann nicht @Der Martin, sondern ebody den Minuspunkt verdient?

                              non modo, sed etiam.
                              Es ändert zumindest nichts daran, dass mein Ansatz suboptimal war.

                              Einen schönen Tag noch
                               Martin

                              --
                              Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.
                              1. „Subotimal“ ist nicht "schlecht" - immerhin funktioniert der Vorschlag wie angefragt.

                                „Geht besser“ ist eine andere Hausnummer und sollte positiv bewertet werden. Negative Bewertungen sehe ich allenfalls dann gebracht, wenn nicht funktionierendes oder gefährliches Zeug gepostet wird. Oder wenn die gebotene Lösung zeigt, dass sich jemand nicht mit der Frage auseinander gesetzt hat.

  2. Moin,

    ist es über einen Parameter von substr() möglich, die restlichen 6 freien Stellen z.b. mit 0 aufzufüllen? Oder gibt es eine Alternative Methode zu substr() die das erfüllt?

    const str = '1234';
    const change = str.substr(0, 10);
    console.log(change); // 1234
    

    die Triviallösung, die mir einfällt:
    Fülle den String erst auf die gewünschte Länge auf und schneide dann ab.

    const change = (str+"0000000000").substr(0, 10);
    

    Einen schönen Tag noch
     Martin

    --
    Fortschrittlich: In Kentucky ist es gesetzlich vorgeschrieben, mindestens einmal im Jahr zu baden.