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
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.
È 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.
a meno che non sia 'NaN' – jcolebrand
Ho incorporato il tuo pensiero in una versione più lunga della mia risposta, fa quel tipo di combinare ciò che pensavi? – jcolebrand
Sì, qualcosa del genere è quello che intendevo :) –
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
.
Sicuramente meglio restituire NaN se uno dei due è NaN? –
Buone informazioni da sapere, ma non mi preoccupo di NaN. – dnc253
idk, qual è la specifica? ;-) ... dovresti preoccuparti di NaN perché ti morderà nel culo per la prima volta. – jcolebrand
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;
}
});
meno che non sia 'NaN' – jcolebrand
non è diverso da' parseInt' .... –
Così , Ero preoccupato che se avessi usato 'parseFloat()' avrei finito con "5.0" invece di "5", ma a quanto pare non è così? – dnc253