Errores al multiplicar con decimales

Otra duda. Tengo este script, pero he detectado el siguiente fallo: que si pones números enteros funciona muy bien, pero en cuanto pones un numero con decimales (por ej. 2,3) no funciona. ¿Es qué javascript no soporta números con decimales? Si no, ¿cuál es l solución?
<SCRIPT LANGUAGE=JavaScript>
function Sumar() {
var val1;
var val2;
var val3;
val1 = (! ParseInt(document.factura.sum1.value))?0:parseInt(document.factura.sum1.value);
val2 = (! ParseInt(document.factura.sum2.value))?0:parseInt(document.factura.sum2.value);
val3 = (! ParseInt(document.factura.sum3.value))?0:parseInt(document.factura.sum3.value);
document.factura.tot.value = val1 + val2 + val3;
}
</SCRIPT>
<form name=factura>
<tr><td><input type=text value="Item 1"></td>
<td><input name=sum1 size=5 onChange=Sumar()></td>
</tr>
<tr><td><input type=text value="Item 2"></td>
<td><input name=sum2 size=5 onChange=Sumar()></td>
</tr>
<tr><td><input type=text value="Item 3"></td>
<td><input name=sum3 size=5 onChange=Sumar()></td>
</tr>
<tr><td align=right><input type=button value="Total:" onClick=Sumar()></td>
<td><input name=tot size=6></td>
</tr>
</form>

5 Respuestas

Respuesta
1
Decirte que en javascript puedes trabajar perfectamente con números decimales. El problema que comentas no se debe a cómo javascript trata a los números decimales.
El error está en el funcionamiento del script. Si te fijas, en el código empleas la función parseInt(), la cual convierte el argumento que se le pasa en un número entero. Por lo tanto cuando introduces un número decimal, el script lo convierte automátyicamente a un número entero.
Prueba a cambiar los valores de val1, val2 y val3 por:
val1=(! parseInt(document.factura.sum1.value))?0:document.factura.sum1.value;
val2=(! parseInt(document.factura.sum2.value))?0:document.factura.sum2.value;
val3=(! parseInt(document.factura.sum3.value))?0:document.factura.sum3.value;
Prueba con esto, y si te falla dímelo e intentaré comprobarlo.
Respuesta
1
El primer problema está con la coma... para indicar un numer decimal has de utilizar el punto.
El segundo problema :)
parseInt? si acaso será parseFloat :) aunque también puedes utilizar Numer()...
val1 = (! parseFloat(document.factura.sum1.value))?0:parseFloat(document.factura.sum1.value);
val1 = Number(document.factura.sum1.value);
El problema de la coma y el punto... antes de sumar parsea el value, y si lleva coma, cámbialo por un punto.
Iv.
Respuesta
1
Para poder operar con números decimales en javascript, en vez de usar la función "parseInt(string)" deberás usar "parseFloat(string)" porque sino los decimales se pierden.
Respuesta
1
Bunas pedroche, esto te puede estar pasando por dos cosas:
-La primera de ellas es que tengas un error en la función, cosa que dudo porque no te funcionaria en ningún caso, pero es una posibilidad.
- Mira a ver si el error trabajando con decimale te lo da en todos los casos, es decir, si denotas el decimal con un punto y con una coma, si en uno de los dos casos te funciona, tendrás que modificar el código para sustituir un símbolo por el otro cuando el usuario escriba el dato y envíe el formulario.
En cualquier caso, si no es esto ultimo dímelo y analizare la función con más detalle. Mira primero lo del punto ya que me ha pasado alguna vez y he tenido que hacer la sustitutcion.
Nada más.
Respuesta
Javascript si que soporta números con decimales, solo que la parte entera se separa de la decimal con un punto y no con una coma.
Ej:
2.3

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas