2015-11-05 2 views
1

Existe-t-il un moyen simple d'analyser une chaîne en entier ou en flottant si je ne sais pas si la variable est un nombre entier ou un nombre décimal?Convertir une chaîne en nombre entier ou float en javascript

a = '2'; // => parse to integer 
b = '2.1'; // => parse to float 
c = '2.0'; // => parse to float 
d = 'text'; // => don't parse 

EDIT: Il semble ma question manquait le contexte nécessaire: Je veux faire des calculs sans perdre le format d'origine (format original signifie donc entier par rapport à flotteur Je ne me soucie pas du nombre initial de décimales. places):

Exemple:

String containing the formatted number ('2') => parse to number (2.0) => do some calculations (2.0 + 1 = 3.0) => restore "original format" ('3' and not '3.0')

Si l'entrée était de 2,0 au lieu, le résultat recherché serait '3.0' (et non '3').

+0

Pourquoi vous wan't pour analyser? Javascript a un typage dynamique. De plus, le seul type numérique est double. –

+0

@david a .: Merci d'avoir signalé cela. Je n'étais pas au courant de ça. Je me demande toujours pourquoi il y a deux fonctions (parseInt, parseFloat) en JavaScript s'il n'y a qu'un seul type numérique. – am2124429

+1

Je pense que la différence est juste comment les deux analysent l'entrée - 'parseInt()' ne prend que la partie entière de celui-ci, tandis que 'parseFloat()' prend la décimale (et peut-être l'exposant). Ils, cependant, retournent tous les deux le même type (nombre, qui est en fait un type à virgule flottante). Voir les spécifications des numéros JS ici: http://www.ecma-international.org/ecma-262/6.0/index.html#sec-terms-and-definitions-number-value. MSDN mentionne la même chose ici: https://msdn.microsoft.com/library/7wkd9z69(v=vs.94).aspx#Anchor_4 –

Répondre

0

C'est ainsi que j'ai résolu le problème. Je ne trouve pas d'autre solution que d'ajouter le type de variable à la variable ...

var obj = { 
 
\t a: '2', 
 
\t b: '2.1', 
 
\t c: '2.0', 
 
\t d: 'text' 
 
}; 
 
// Explicitly remember the variable type 
 
for (key in obj) { 
 
    var value = obj[key], type; 
 
    if (isNaN(value) || value === "") { 
 
    type = "string"; 
 
    } 
 
    else { 
 
    if (value.indexOf(".") === -1) { 
 
     type = "integer"; 
 
    } 
 
    else { 
 
     type = "float"; 
 
    } 
 
    value = +value; // Convert string to number 
 
    } 
 
    obj[key] = { 
 
    value: value, 
 
    type: type 
 
    }; 
 
} 
 
document.write("<pre>" + JSON.stringify(obj, 0, 4) + "</pre>");

6

Multipliez la chaîne qui a des données numériques par 1. Vous obtiendrez la valeur de données Numeric.

var int_value = "string" * 1; 

Dans votre cas

a = '2' * 1; // => parse to integer 
b = '2.1' * 1; // => parse to float 
c = '2.0' * 1; // => parse to float 
d = 'text' * 1; // => don't parse //NaN value 

Pour dernier, vous obtiendrez la valeur NaN. Manipulation manuelle de la valeur NaN

+0

Cela ressemble à une solution plus agréable que celle acceptée et fonctionne bien dans mon cas. – alberto2000

+0

C'est aussi le moyen le plus rapide de le faire, de loin, même par rapport à JSON.parse. – Ravenstine