So löschen Sie "px" von 245px

82

Was ist eine einfache Möglichkeit, die letzten beiden Zeichen einer Zeichenfolge zu löschen?

Tomkay
quelle

Antworten:

176

Um 245pxin 245 zu konvertieren, führen Sie einfach Folgendes aus:

parseInt('245px', 10);

Es behält nur führende Zahlen bei und verwirft den Rest.

Don
quelle
7
Dies ist der formbarste Weg, aber Sie sollten immer den Radix angebenparseInt('245px', 10)
Justin Johnson
Sie haben Recht: Die (seltsame) Standardeinstellung ist oktal, wenn die Zeichenfolge mit '0' beginnt ... Wie oft habe ich einen Fehler erhalten parseInt('09')!
Don
4
Was tun Sie, wenn der Wert 35,5px beträgt? Wenn Sie parseInt verwenden, erhalten Sie nur 35
Muhammad Umer,
5
@ MuhammadUmer: Sie können 'parseFloat' ( w3schools.com/jsref/jsref_parsefloat.asp ) verwenden
Don
38

verwenden

var size = parseInt('245px', 10);

Dabei ist 10 die Radixdefinition , die parseIntauf einen Dezimalwert analysiert wird

Verwenden Sie parseInt, aber verwenden Sie parseInt nicht ohne Radix

Die Funktion parseInt () analysiert eine Zeichenfolge und gibt eine Ganzzahl zurück.

Die Unterschrift ist parseInt(string, radix)

Das zweite Argument zwingt parseInt, ein Nummerierungssystem der Basis zehn zu verwenden.

  • Der Standardeingabetyp für ParseInt () ist dezimal (Basis 10).
  • Wenn die Zahl mit "0" beginnt, wird angenommen, dass sie oktal ist (Basis 8).
  • Wenn es mit "0x" beginnt, wird angenommen, dass es hexadezimal ist

Warum? Wenn $ (this) .attr ('num') "08" wäre, würde parsInt ohne Radix 0 werden

Caspar Kleijne
quelle
19

So konvertieren Sie einen Pixelwert ohne das "px" am Ende. benutze parseFloat.

parseFloat('245px'); // returns 245      

Hinweis: Wenn Sie parseInt verwenden, ist der Wert korrekt, wenn der Wert eine Ganzzahl ist. Wenn der Wert wie 245,50 Pixel dezimal ist, wird der Wert auf 245 gerundet.

Für immer
quelle
Da meine Bearbeitung, um eine Präzision vorzunehmen, abgelehnt wurde, werde ich dies in einen Kommentar einfügen , parseFloat()der nicht wie folgt aussiehtparseInt() (siehe developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… & stackoverflow.com/). Fragen / 8555649 /… )
Wax
16

Dies macht genau das, was Sie fragen: Entfernen Sie die letzten beiden Zeichen einer Zeichenfolge:

s.substr(0, s.length-2);
Jochem
quelle
5

Überraschenderweise ist die Teilstring-Methode s.substr(0, s.length-2);zum Entfernen des Teilstrings tatsächlich ziemlich viel schneller px(ja, sie sieht nicht so sauber aus, und wenn ein Leerzeichen vorhanden ist, bleibt sie erhalten - "250px" -> "250"vs "250 px" -> "250 ").

Wenn Sie Leerzeichen berücksichtigen möchten (was Sie wahrscheinlich sollten), .trim()verlangsamt die Verwendung der Funktion den substrTest tatsächlich so weit , dass die parseIntMethode tatsächlich überlegen wird.

Ein zusätzlicher Vorteil der Verwendung parseInt(s, 10)besteht darin, dass Sie auch eine Typkonvertierung erhalten und diese sofort auf mathematische Funktionen anwenden können.

Am Ende kommt es also wirklich darauf an, was Sie mit dem Ergebnis vorhaben.

  • Wenn es nur angezeigt wird, ist die Verwendung der substrMethode ohne Trimmung wahrscheinlich die beste Wahl.
  • Wenn Sie nur versuchen zu sehen, ob der Wert ohne px mit einem anderen Wert identisch ist s.substr(0, s.length-2) == 0, ist die Verwendung der substrMethode am besten, da "250 " == 250(auch mit Leerzeichen) als resultierttrue
  • Wenn Sie die Möglichkeit eines Leerzeichens berücksichtigen, es einem anderen Wert hinzufügen oder etwas damit berechnen möchten, sollten Sie die parseIntRoute in Betracht ziehen .

http://jsperf.com/remove-px-from-coord

Die Tests auf jspref berücksichtigen ein Leerzeichen. Ich habe auch a s.split('px')[0]und s.replace(/ *px/g, '')function ausprobiert , beide waren langsamer.

Fühlen Sie sich frei, zusätzliche Testfälle hinzuzufügen.

Kyle Shay
quelle
1

Obwohl parseInt () eine gute Option ist, ist es dennoch gut, viele andere Lösungen zu haben

var pixels = '245px';
Number(pixels.replace('px', ''));
Shoaib Ahmad
quelle
0

Ich bevorzuge: "245px".replace(/px/,'')*1

da es den Eingang nicht umgibt.

Das *1ist auch für das Casting auf int.

bArmageddon
quelle
0

substr()ist jetzt eine Legacy-Funktion ; Verwenden Sie substring()stattdessen: (Die Syntax ist in diesem Fall dieselbe. )

str.substring(0, str.length-2);

Oder verwenden Sie slice():

str.slice(0, -2);

slice()sieht viel sauberer aus, IMO. Negative Werte zählen vom Ende zurück.

Elijah Mock
quelle
Dies führt jedoch zu einer weniger wertvollen Funktion, da sie nicht für remWerte verwendet werden kann.
Alan Shortis