2012-10-19 4 views
5

Attraverso la mia libreria javascript, si finisce con una stringa che rappresenta un numero. Ora voglio preformare un'aggiunta su quel numero senza fare una concatenazione di stringhe. La soluzione è semplice ( How do I add an integer value with javascript (jquery) to a value that's returning a string?, How to make an addition instead of a concatenation) se il numero è sempre intero. Comunque la mia stringa potrebbe essere un float o un intero, e al momento dell'aggiunta, e non so quale sarà. C'è un modo per assicurarsi che l'aggiunta avvenga indipendentemente dal fatto che si tratti di un float o di un intero?Come garantire l'aggiunta di javascript anziché la concatenazione di stringhe (Non sempre l'aggiunta di numeri interi)

risposta

10

Provare a utilizzare parseFloat. Le variabili di input saranno convertite in float, il che funzionerà se la stringa contiene un intero o un float. Il tuo risultato sarà sempre un galleggiante.

+0

meno che non sia 'NaN' – jcolebrand

+0

non è diverso da' parseInt' .... –

+0

Così , Ero preoccupato che se avessi usato 'parseFloat()' avrei finito con "5.0" invece di "5", ma a quanto pare non è così? – dnc253

4

È ragionevolmente sicuro utilizzare sempre parseFloat anche se viene fornito un numero intero. Se è necessario utilizzare la conversione appropriata, è possibile immettere match per un punto decimale e utilizzare la funzione appropriata.

+0

a meno che non sia 'NaN' – jcolebrand

+0

Ho incorporato il tuo pensiero in una versione più lunga della mia risposta, fa quel tipo di combinare ciò che pensavi? – jcolebrand

+0

Sì, qualcosa del genere è quello che intendevo :) –

2

Suppongo che l'aggiunta del float sia sufficiente e, in caso contrario, sarà necessario scavare più a fondo.

function alwaysAddAsNumbers(numberOne, numberTwo){ 
    var parseOne = parseFloat(numberOne), 
     parseTwo = parseFloat(numberTwo); 
    if (isNaN(parseOne)) parseOne = 0; 
    if (isNaN(parseTwo)) parseTwo = 0; 
    return parseOne + parseTwo; 
} 

di prendere ciò che @Asad detto, si potrebbe desiderare di fare questo, invece:

function alwaysAddAsNumbers(a, b){ 
    var m = 0, 
     n = 0, 
     d = /\./, 
     f = parseFloat, 
     i = parseInt, 
     t = isNaN, 
     r = 10; 
    m = (d.test(a)) ? f(a) : i(a,r); 
    n = (d.test(b)) ? f(b) : i(b,r); 
    if (t(m)) m = 0; 
    if (t(n)) n = 0; 
    return m + n; 
} 

questo vi darà sempre almeno un'uscita zero, e non ti dice se uno dei due è NaN.

+0

Sicuramente meglio restituire NaN se uno dei due è NaN? –

+0

Buone informazioni da sapere, ma non mi preoccupo di NaN. – dnc253

+0

idk, qual è la specifica? ;-) ... dovresti preoccuparti di NaN perché ti morderà nel culo per la prima volta. – jcolebrand

0

Per qualche motivo .... chi lo sa ???

Utilizzo di parseFloat funziona .... quando parseInt non ... ovviamente non sono sempre gli stessi.

FWIW .... sto "aggiungendo" elementi di dati da "controllare" caselle qui ...

var AddOns = 0; 

    $('.broadcast-channels').each(function(){    
     if ($(this).prop("checked")) {        
      var thisAddOn = parseFloat($(this).data('channel'));  
      AddOns = AddOns + thisAddOn;          
     }   
});