web-dev-qa-db-fra.com

Coffeescript: comment convertir une chaîne en nombre?

Je construis un objet JSON envoyé dans une demande POST . Cet objet a des propriétés qui doivent être converties de type chaîne en type entier avant d'être envoyées. Comment fait-on cela avec coffeescript?

41
nachonachoman

Utilisez la fonction javascript parseInt.

number = parseInt( stringToParse, 10 );

La référence est ici .

Rappelez-vous que coffeescript est juste du javascript après la compilation

60
obmarg

Vous pouvez utiliser l'opérateur + moins évident, plus magique, moins gourmand en clavier:

+"158"
37
Corkscreewe

La fonction parseInt de Javascript y parviendra. N'oubliez pas de définir le paramètre radix pour éviter toute confusion et assurer un comportement prévisible. (Par exemple, dans Coffeescript)

myNewInt = parseInt("176.67", 10)

Il existe quelques bons exemples dans les ressources MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

7
ScottB

Je ne recommande pas d'utiliser parseInt car c'est faux dans un cas - que j'ai trouvé:

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

La bonne réponse devrait être celle de @Corkscreewe. Et il y en a un autre: 

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

Apprenez de https://coderwall.com/p/cbabhg

2
nXqd

Sur la base du lien, mentionné dans nXqd's answer , vous pouvez également convertir implicitement une chaîne en la multipliant par 1:

'123' * 1 // 123

Il se comporte correctement pour une saisie incorrecte:

'123abc' * 1 // NaN

Vous pouvez le faire aussi avec des flotteurs:

'123.456' * 1 // 123.456
2
Alex Popov

Cela n'a pas encore été documenté dans le manuel officiel, mais il semble que les opérateurs de casting fonctionnent aussi

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

J'utilise toujours OR au niveau du bit pour convertir les chaînes en entiers .

"99.999" | 0 // returns 99
1
pravdomil

Ceci est un moyen simple pour votre besoin. NaN sera retourné comme prévu.

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

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

0
suffering