2012-05-23 10 views

Odpowiedz

55

Użyj funkcji javascript parseInt.

number = parseInt(stringToParse, 10); 

Numer referencyjny to here.

Pamiętaj, coffeescript javascript tylko po to skompilowane

+1

Tak, skończyłem robiąc to dziękuję – nachonachoman

+4

Uważaj na liczby ósemkowe przy użyciu parseInt. – Corkscreewe

+5

Zawsze podawaj [radix] (http://en.wikipedia.org/wiki/Radix), np.'parseInt (stringToParse, 10)' – Stefan

33

można użyć mniej oczywista, bardziej magiczny, mniejsze klawiatury intensywnie operatora +:

+"158" 
+0

to całkiem fajne! Nie mogę znaleźć żadnych dokumentów na temat tej funkcji, gdzie się tego nauczyłeś? – nachonachoman

+5

To nie jest funkcja coffeescript, to operator jednoargumentowy javascript w znaczeniu plus/minus przed numerem. Pamiętaj, że możesz bardzo szybko napotkać problemy: 'a = true; + a ++ + + (++ a) ' – Corkscreewe

+0

Czy alert (id +" 123 ") i alert (id +" 123 ") dają różne wyniki? – nachonachoman

2

Nie zostało to jeszcze udokumentowane w oficjalnej instrukcji, ale wygląda na to, że operatorzy odlewni również działają:

myString = "12323" 
myNumber = (Number) myString 
+2

To nie jest operator obsady, interpretuje' (Number) 'jako funkcję (ignorując parens) za pomocą' myString "jako jego argument. Więc kompiluje się do 'Number (myString)', który ma zamierzony efekt. –

+0

Oczywiście. Dziękuję za wyjaśnienie. – mzedeler

2

Nie polecam korzystania parseInt ponieważ jest nie tak w jednym przypadku - co znalazłem:

parseInt('09asdf', 10); 
#> return 09 which is not correct at all. It should return NaN 

Prawidłowa odpowiedź powinna być jednym z @Corkscreewe. I tu jest inny:

cleanInt = (x) -> 
    x = Number(x) 
    (if x >= 0 then Math.floor(x) else Math.ceil(x)) 

piszą https://coderwall.com/p/cbabhg

0

Jest to prosta droga do potrzeb użytkownika. NaN zostanie zwrócone zgodnie z oczekiwaniami.

parseInt("09asdf".match(/^\d+$/)?[0] ? NaN, 10) 
2

oparciu o łącza, o których mowa w nXqd's answer, można również niejawnie przekonwertować ciąg, mnożąc ją przez 1:

'123' * 1 // 123 

Zachowuje się poprawnie do niewłaściwego wejścia:

'123abc' * 1 // NaN 

Możesz to zrobić również w przypadku akcji:

'123.456' * 1 // 123.456 
0

stringToConvernt = "$13,452,334.5" 
 
output = Number(stringToConvernt.replace(/[^0-9\.]/g, '')) 
 
console.log(output) 
 
//The output is `13452334.5`.

+0

ostatnia linia jest niepoprawna: 3 'log.console -> console.log' – Illuminator

1

jestem zawsze za pomocą bitowego OR do konwersji ciągi do liczb całkowitych.

"99.999" | 0 // returns 99 
Powiązane problemy