Aquí está la situación, estoy ingresando una cantidad en dólares dentro del campo de texto algo similar al siguiente código:
<input type="text" name="qtr-revenue-<?php echo $qtr ?>" id="qtr-revenue-<?php echo $qtr ?>" class="qtr-revenue editable" value="<?php echo App_Number::formatCurrency($qtrNumbers['Revenue'], 2, '', true, '') ?>" />Sin embargo, está sucediendo lo siguiente, puedo formatear correctamente, por ejemplo, 9,000,000.90 sin problemas, sin embargo, cada vez que ingreso por error 9,000,000.90000099323, formatea el número a 9,000,000.900,000,993,23
¿Cómo formateo correctamente el monto en dólares de 9,000,000.90000099323 a 9,000,000.90?
Aquí está el código javascript que formatea el número en este momento.
$(this).val(function (index, value) { return value .replace(/[^-\d\.]/g, "") .replace(/\B(?=(\d{3})+(?!\d))/g, ","); });Puedes probar este enfoque. Sin embargo, no es compatible con IE11. También puedes jugar con diferentes monedas y sus formatos.
Aquí hay algunas guías: MDN Web Docs
const number = "9,000,000.90000099323".replace(/,/g, ''); console.log(new Intl.NumberFormat('en-CA', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(number));Así que en tu caso podría ser algo como
$(this).val(new Intl.NumberFormat('en-CA', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format("9,000,000.90000099323".replace(/,/g, '')));Actualización, encontré una solución mucho más simple:
Si publico el siguiente código:
if (revenue.toString().indexOf('.') != -1) { $(this).val(revenue.toFixed(2)); }Esto hace el trabajo que estoy buscando.
No soy un experto en JS, pero tengo un sitio web financiero y para hacer que un número se vea como el siguiente, uso el código debajo de 1,139,447,000
String(value).replace(/(.)(?=(\d{3})+$)/g,'$1,');Creo que debería poder cambiar el resultado actualizando la expresión regular aquí