Jak usunąć „px” z 245px

Odpowiedzi:

182

Aby przekonwertować 245pxw 245, po prostu uruchom:

parseInt('245px', 10);

Zachowuje tylko wiodące liczby, a resztę odrzuca.

Don
źródło
7
Jest to najbardziej plastyczny sposób, ale zawsze należy określać podstawęparseInt('245px', 10)
Justin Johnson,
Masz rację: (dziwne) domyślne ustawienie to ósemkowe, gdy ciąg zaczyna się od „0” ... Ile razy otrzymałem błąd dla parseInt('09')!
Don
4
co zrobić, gdy wartość jest taka jak 35,5px..używanie parseInt dałoby tylko 35
Muhammad Umer
5
@MuhammadUmer: możesz użyć 'parseFloat' ( w3schools.com/jsref/jsref_parsefloat.asp )
Don
38

posługiwać się

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

gdzie 10 to podstawa definiująca parseIntto analizowanie do wartości dziesiętnej

użyj parseInt, ale nie używaj parseInt bez podstawy

Funkcja parseInt () analizuje ciąg znaków i zwraca liczbę całkowitą.

Podpis jest parseInt(string, radix)

Drugi argument wymusza na parseInt użycie dziesięciokrotnego systemu numeracji.

  • Domyślnym typem wejścia dla ParseInt () jest liczba dziesiętna (podstawa 10).
  • Jeśli liczba zaczyna się od „0”, zakłada się, że jest ósemkowa (podstawa 8).
  • Jeśli zaczyna się od „0x”, przyjmuje się, że jest szesnastkowy

czemu? gdyby $ (this) .attr ('num') było "08" parsInt bez podstawy stałoby się 0

Caspar Kleijne
źródło
19

Aby przekonwertować wartość piksela bez „px” na końcu. użyj parseFloat.

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

Uwaga: jeśli używasz parseInt, wartość będzie poprawna, jeśli wartość jest liczbą całkowitą. Jeśli wartość jest liczbą dziesiętną, na przykład 245,50 piks., Zostanie zaokrąglona do 245.

Na zawsze
źródło
Ponieważ moja edycja wprowadzająca precyzję została odrzucona, umieszczę to w komentarzu, parseFloat()nie przyjmuje radix parseInt()(patrz developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /... & stackoverflow.com/ pytania / 8555649 /… )
Wosk
16

Robi dokładnie to, o co prosisz: usuwa ostatnie dwa znaki łańcucha:

s.substr(0, s.length-2);
Jochem
źródło
5

Co zaskakujące, metoda podciągów s.substr(0, s.length-2);jest w rzeczywistości nieco szybsza w usuwaniu px(tak, nie wygląda tak czysto, a jeśli jest miejsce, pozostanie - "250px" -> "250"vs "250 px" -> "250 ").

Jeśli chcesz wziąć pod uwagę spacje (co prawdopodobnie powinieneś), użycie tej .trim()funkcji w rzeczywistości spowolni substrtest na tyle, że parseIntmetoda faktycznie stanie się lepsza.

Dodatkową zaletą używania parseInt(s, 10)jest to, że uzyskujesz również konwersję typu i możesz natychmiast zacząć stosować ją do funkcji matematycznych.

Ostatecznie to naprawdę zależy od tego, co planujesz zrobić z wynikiem.

  • Jeśli jest to tylko wyświetlanie, najlepszym rozwiązaniem będzie prawdopodobnie użycie substrmetody bez przycinania.
  • Jeśli próbujesz tylko sprawdzić, czy wartość bez px jest taka sama jak inna wartość s.substr(0, s.length-2) == 0, użyj substrmetody, która będzie najlepsza, ponieważ "250 " == 250(nawet ze spacją) datrue
  • Jeśli chcesz uwzględnić możliwość spacji, dodać ją do innej wartości lub obliczyć coś z nią, możesz rozważyć wybranie parseInttrasy.

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

Testy na jspref uwzględniają spację. Spróbowałem też s.split('px')[0]i s.replace(/ *px/g, '')funkcji, oba okazały się wolniejsze.

Zapraszam do dodawania dodatkowych przypadków testowych.

Kyle Shay
źródło
1

Chociaż parseInt () jest dobrą opcją, ale nadal dobrze jest mieć wiele innych rozwiązań

var pixels = '245px';
Number(pixels.replace('px', ''));
Shoaib Ahmad
źródło
0

Wolę: "245px".replace(/px/,'')*1

ponieważ nie otacza wejścia.

Ponadto *1służy do przesyłania go do int.

bArmageddon
źródło
0

substr()jest teraz starszą funkcją ; użyj substring()zamiast tego: (składnia jest taka sama w tym przypadku )

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

Lub użyj slice():

str.slice(0, -2);

slice()wygląda na znacznie czystszą, IMO. Wartości ujemne liczą się od końca.

Elijah Mock
źródło
Jest to jednak mniej wartościowa funkcja, ponieważ nie może być używana do remwartości.
Alan Shortis