substr() - Wenn der String kürzer ist als length, Restliche freie Stellen mit Zeichen auffüllen
ebody
- javascript
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
@@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 zusubstr()
die das erfüllt?
Na schauen wa mal, was es so für Stringfunktionen gibt.
in MDN nach „String“ gesucht → String
Links in der Liste die Funktionen durchgeschaut; bei unbekannten mal draufgeclickt, um die Erklärung zu lesen → String.prototype.padEnd()
🖖 Живіть довго і процвітайте
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'.
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' )
liefert1234000000
.'1234.0'.padEnd( 10, '0' )
liefert1234.00000
.Der Unterschied
erscheint hierist 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
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
Ja. Aber ebody hat in seinem Beispiel keinen Dezimalpunkt.
Ich vermute aber einen Zusammenhang - und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?
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
und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?
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.
Hallo,
und was würde unsere Hilfe wohl taugen, wenn wir nicht diese wunderbaren Glaskugeln hätten?
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
@@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?
🖖 Живіть довго і процвітайте
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
@@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.
🖖 Живіть довго і процвітайте
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
@@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.
🖖 Живіть довго і процвітайте
@@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.
🖖 Живіть довго і процвітайте
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
Und wenn jetzt einer fragt, was die Iten des Schulze sind... 😉 ↩︎
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
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
@@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?
🖖 Живіть довго і процвітайте
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
„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.
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 zusubstr()
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