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.