sirve - isNaN() javascript, número con 2 comas
parsefloat javascript (2)
Estoy trabajando con el porcentaje y el setInterval()
así que tengo un
var intervalId;
function randomize(){
var prc = $("#prc").val();
var c = 0 ;
if (!intervalId){
intervalId = setInterval(function(){
c = c + 1;
var attempt = Math.random() * 100;
if (attempt <= prc){
clearInterval(intervalId);
intervalId = false;
$("#attemptnbr").val(c);
}
}, 100);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Percentage : <input type="text" id="prc"/>
<button onclick="randomize()">GO</button>
Number of attempts :<input type="text" id="attemptnbr"/>
Pero en realidad si el usuario establece la entrada de 50.345.34
a 50.345.34
, la condición de attempt <= prc
siempre devuelve true
. Traté de console.log(isNaN(prc))
cuando esta entrada se establece en un número como 50.345.34
y siempre devuelve false
.
¿Por qué se considera como un valor numérico?
Pero en realidad si el usuario establece la entrada de #prc a 50.345.34, la condición de intento <= prc siempre devuelve verdadero.
Estoy bastante seguro de que es un error de observación. Su prc
es una cadena, que el operador <=
convertirá implícitamente en un número. El número será NaN
porque "50.345.34" no se puede convertir implícitamente, y las relaciones que usan NaN
nunca son verdaderas.
Sin embargo, realmente no cambia lo que quiere hacer al respecto, que es convertir prc
a un número a propósito y probar el resultado:
var intervalId;
function randomize(){
var prc = +$("#prc").val();
// ^------------------- Note the +, that converts it to a number
if (isNaN(prc)) {
// Handle the invalid input
return;
}
var c = 0 ;
if (!intervalId){
intervalId = setInterval(function(){
c = c + 1;
var attempt = Math.random() * 100;
if (attempt <= prc){
clearInterval(intervalId);
intervalId = false;
console.log(attempt);
}
}, 100);
}
}
Debo señalar que lo anterior puede hacer algo que no desees si la entrada está vacía : usará el valor 0
, porque +""
es 0
. Si no quieres eso, puedes hacer esto:
var prcString = $.trim($("#prc").val());
var prc = +prcString;
if (!prcString) {
// Handle the fact they didn''t enter anything
return;
}
if (isNaN(prc)) {
// Handle the invalid input
return;
}
Porque $("#prc").val()
devuelve una cadena. 50.345.34
es una cadena. Cuando compare cadena y número, js comparará la longitud de la cadena y el valor numérico.