Así que estoy aprendiendo javascript, y no he estado trabajando con él por mucho tiempo, y tengo el siguiente código:
function doslope() { var b, m; x1 = parseFloat(document.getElementById("x1").value); y1 = parseFloat(document.getElementById("y1").value); x2 = parseFloat(document.getElementById("x2").value); y2 = parseFloat(document.getElementById("y2").value); m = (y2 - y1) / (x2 - x1); b = y1 - m * x1; m = m.toFixed(2); b = b.toFixed(2); if (Number.isInteger(m)) { m = parseInt(m.toString()); } if (Number.isInteger(b)) { b = parseInt(b.toString()); } document.getElementById("result").innerHTML = "y=" + m + "x+" + b; } <label>x1<input id="x1" /></label><br> <label>y1<input id="y1" /></label><br> <label>x2<input id="x2" /></label><br> <label>y2<input id="y2" /></label><br> <button onclick="doslope()">Do slope</button><br> <br> <output id="result"></output> Cuando ejecuto esto con los números x1=5 , y1=5 , x2=6 y y2=3 obtengo el resultado y=-2.00x+15.00 .
Me pregunto qué error estoy cometiendo aquí que no elimina el .00 al final del número.
El problema es que las sentencias if que tienes, te están devolviendo false, por lo que no estás haciendo el parseInt, si las sacas, funciona correctamente:
function doslope() { var b, m; x1 = parseFloat(5); y1 = parseFloat(5); x2 = parseFloat(6); y2 = parseFloat(3); m = (y2 - y1) / (x2 - x1); b = y1 - m * x1; m = m.toFixed(2); b = b.toFixed(2); m = parseInt(m.toString()); b = parseInt(b.toString()); document.getElementById("result").innerHTML = "y=" + m + "x+" + b; }¿Por qué estás usando esa declaración if?
Si quieres que el usuario solo pueda poner números, puedes intentar con algo como esto: type="number" solo permite poner números, y step="0.01" te permite poner números decimales
<label>x1<input id="x1" type="number" step="0.01" /></label><br> <label>y1<input id="y1" type="number" step="0.01" /></label><br> <label>x2<input id="x2" type="number" step="0.01" /></label><br> <label>y2<input id="y2" type="number" step="0.01" /></label><br>Number.isInteger() verifica el tipo de valor y dado que sus variables m y b son cadenas, siempre devolverá falso. Lo que podrías hacer es convertirlos temporalmente en flotantes:
if (Number.isInteger(parseFloat(m))) { m = parseInt(m.toString()); } Alternativamente (y en su caso, creo que sería una mejor opción) es simplemente eliminar .00 de la cadena en sí:
m = m.toFixed(2).replace(/\.?0+$/, ''); b = b.toFixed(2).replace(/\.?0+$/, '');