redondear parte obtener numeros numero limitar formato digitos decimals decimales contar con javascript floating-point number-formatting

javascript - parte - Formato de número para mostrar siempre 2 decimales.



obtener la parte decimal de un numero en javascript (24)

Me gustaría formatear mis números para mostrar siempre 2 decimales, redondeando donde corresponda.

Ejemplos:

number display ------ ------- 1 1.00 1.341 1.34 1.345 1.35

He estado usando esto:

parseFloat(num).toFixed(2);

Pero está mostrando 1 como 1 , en lugar de 1.00 .


¿Buscas piso?

var num = 1.42482; var num2 = 1; var fnum = Math.floor(num).toFixed(2); var fnum2 = Math.floor(num2).toFixed(2); alert(fnum + " and " + fnum2); //both values will be 1.00


¿Es esto lo que quieres decir?

function showAsFloat(num, n){ return !isNaN(+num) ? (+num).toFixed(n || 2) : num; } document.querySelector(''#result'').textContent = [ ''command | result'', ''-----------------------------------------------'', ''showAsFloat(1); | '' + showAsFloat(1), ''showAsFloat(1.314); | '' + showAsFloat(1.314), ''showAsFloat(/'notanumber/') | '' + showAsFloat(''notanumber''), ''showAsFloat(/'23.44567/', 3) | '' + showAsFloat(''23.44567'', 3), ''showAsFloat(2456198, 5) | '' + showAsFloat(''2456198'', 5), ''showAsFloat(0); | '' + showAsFloat(0) ].join(''/n'');

<pre id="result"></pre>


Aquí también hay una función genérica que puede formatear a cualquier número de decimales:

function numberFormat(val, decimalPlaces) { var multiplier = Math.pow(10, decimalPlaces); return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces); }


Así es como soluciono mi problema:

parseFloat(parseFloat(floatString).toFixed(2));


Convierte un número en una cadena, manteniendo solo dos decimales:

var num = 5.56789; var n = num.toFixed(2);

El resultado de n será:

5.57


Cuando se requiera un formato específico, debe escribir su propia rutina o usar una función de biblioteca que haga lo que necesita. La funcionalidad básica de ECMAScript generalmente es insuficiente para mostrar números con formato.

Una explicación detallada del redondeo y el formato está aquí: http://www.merlyn.demon.co.uk/js-round.htm#RiJ

Como regla general, el redondeo y el formato solo deben realizarse como último paso antes de la salida. Hacerlo antes puede introducir errores inesperadamente grandes y destruir el formato.


Esto funciona bien en FF4:

parseFloat(Math.round(num3 * 100) / 100).toFixed(2);

Demo en vivo

var num1 = "1"; document.getElementById(''num1'').innerHTML = parseFloat(Math.round(num1 * 100) / 100).toFixed(2); var num2 = "1.341"; document.getElementById(''num2'').innerHTML = parseFloat(Math.round(num2 * 100) / 100).toFixed(2); var num3 = "1.345"; document.getElementById(''num3'').innerHTML = parseFloat(Math.round(num3 * 100) / 100).toFixed(2);

span { border: 1px solid #000; margin: 5px; padding: 5px; }

<span id="num1"></span> <span id="num2"></span> <span id="num3"></span>

Tenga en cuenta que redondeará a 2 decimales, por lo que la entrada 1.346 devolverá 1.35 .


Extiende el objeto matemático con método de precisión

Object.defineProperty(Math, ''precision'',{ value: function (value,precision,type){ var v = parseFloat(value), p = Math.max(precision,0)||0, t = type||''round''; return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p); } }); console.log( Math.precision(3.1,3), // round 3 digits Math.precision(0.12345,2,''ceil''), // ceil 2 digits Math.precision(1.1) // integer part )



No nos estás dando el cuadro completo.

javascript:alert(parseFloat(1).toFixed(2)) muestra 1.00 en mis navegadores cuando lo pego en la barra de ubicación. Sin embargo, si le haces algo después, revertirá.

var num = 2 document.getElementById(''spanId'').innerHTML=(parseFloat(num).toFixed(2)-1) shows 1 and not 1.00


Para el redondeo más preciso, cree esta función:

function round(value, decimals) { return Number(Math.round(value +''e''+ decimals) +''e-''+ decimals).toFixed(decimals); }

y úsalo para redondear a 2 decimales:

console.log("seeked to " + round(1.005, 2)); > 1.01

Gracias a Razu , este artículo y la referencia matemática de MDN .


Si me gusta:

var num = 12.749; parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75

Redondea el número con 2 puntos decimales, luego asegúrate de analizarlo con parseFloat() para devolver el Número, no la Cadena, a menos que no te importe si se trata de Cadena o Número.


Si ya está utilizando jQuery, puede utilizar el complemento Formato de número jQuery .

El complemento puede devolver números con formato como una cadena, puede establecer decimales y miles de separadores, y puede elegir el número de decimales que se mostrarán.

$.number( 123, 2 ); // Returns ''123.00''

También puede obtener jQuery Number Format desde GitHub .


Tuve que decidir entre las conversiones parseFloat () y Number () antes de poder realizar la llamada aFixed (). Aquí hay un ejemplo de una entrada de usuario de captura de formato de número posterior.

HTML:

<input type="number" class="dec-number" min="0" step="0.01" />

Controlador de eventos:

$(''.dec-number'').on(''change'', function () { const value = $(this).val(); $(this).val(value.toFixed(2)); });

El código anterior dará lugar a la excepción TypeError. Tenga en cuenta que aunque el tipo de entrada html es "número", la entrada del usuario es en realidad un tipo de datos "cadena". Sin embargo, la función toFixed () solo se puede invocar en un objeto que es un número.

Mi código final se vería de la siguiente manera:

$(''.dec-number'').on(''change'', function () { const value = Number($(this).val()); $(this).val(value.toFixed(2)); });

La razón por la que prefiero convertir con Number () vs. parseFloat () es porque no tengo que realizar una validación adicional ni para una cadena de entrada vacía, ni para un valor NaN. La función Número () manejaría automáticamente una cadena vacía y la convertiría a cero.


Una solución mucho más genérica para redondear a N lugares.

function roundN(num,n){ return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n); } console.log(roundN(1,2)) console.log(roundN(1.34,2)) console.log(roundN(1.35,2)) console.log(roundN(1.344,2)) console.log(roundN(1.345,2)) console.log(roundN(1.344,3)) console.log(roundN(1.345,3)) console.log(roundN(1.3444,3)) console.log(roundN(1.3455,3)) Output 1.00 1.34 1.35 1.34 1.35 1.344 1.345 1.344 1.346


parseInt(number * 100) / 100; trabajó para mi.


share fallará si el value = 1.005 .

Como mejor solución, el problema de redondeo se puede evitar utilizando números representados en notación exponencial:

Number(Math.round(1.005+''e2'')+''e-2'').toFixed(2); // 1.01

Crédito: Redondeando decimales en JavaScript


function number_format(string,decimals=2,decimal='','',thousands=''.'',pre=''R$ '',pos='' Reais''){ var numbers = string.toString().match(//d+/g).join([]); numbers = numbers.padStart(decimals+1, "0"); var splitNumbers = numbers.split("").reverse(); var mask = ''''; splitNumbers.forEach(function(d,i){ if (i == decimals) { mask = decimal + mask; } if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; } mask = d + mask; }); return pre + mask + pos; } var element = document.getElementById("format"); var money= number_format("10987654321",2,'','',''.''); element.innerHTML = money;

#format{ display:inline-block; padding:10px; border:1px solid #ddd; background:#f5f5f5; }

<div id=''format''>Test 123456789</div>


(num + "").replace(/^([0-9]*)(/.[0-9]{1,2})?.*$/,"$1$2")


Number(1).toFixed(2); // 1.00 Number(1.341).toFixed(2); // 1.34 Number(1.345).toFixed(2); // 1.34 NOTE: See andy''s comment below. Number(1.3450001).toFixed(2); // 1.35

document.getElementById(''line1'').innerHTML = Number(1).toFixed(2); document.getElementById(''line2'').innerHTML = Number(1.341).toFixed(2); document.getElementById(''line3'').innerHTML = Number(1.345).toFixed(2); document.getElementById(''line4'').innerHTML = Number(1.3450001).toFixed(2);

<span id="line1"></span> <br/> <span id="line2"></span> <br/> <span id="line3"></span> <br/> <span id="line4"></span>


function currencyFormat (num) { return "$" + num.toFixed(2).replace(/(/d)(?=(/d{3})+(?!/d))/g, "$1,") } console.info(currencyFormat(2665)); // $2,665.00 console.info(currencyFormat(102665)); // $102,665.00


var num = new Number(14.12); console.log(num.toPrecision(2));//outputs 14 console.log(num.toPrecision(3));//outputs 14.1 console.log(num.toPrecision(4));//outputs 14.12 console.log(num.toPrecision(5));//outputs 14.120



var quantity = 12; var import1 = 12.55; var total = quantity * import1; var answer = parseFloat(total).toFixed(2); document.write(answer);