Quiero obtener una entrada de cadena para el valor del dinero y necesito un número entero (centavos) para almacenarlo. Pero necesito presentárselo al usuario en la interfaz de usuario, lo que significa que necesito recuperar ese valor de un número entero.
El problema es 455.000 (455 x 1000) pero me sale 455. Así que hice algo terriblemente mal en este cálculo.
const toCent = amount => { const str = amount.toString().replace(',', '.') const [int] = str.split('.') return Number(amount.toFixed(2).replace('.', '').padEnd(int.length === 1 ? 3 : 4, '0')) } console.log(toCent(parseFloat('45.99'))); console.log(toCent(parseFloat('455.000'))); console.log((Math.round((toCent(parseFloat('45.99')) / 100 + Number.EPSILON) * 100) / 100).toString()); console.log((Math.round((toCent(parseFloat('455.000')) / 100 + Number.EPSILON) * 100) / 100).toString());El siguiente fragmento funcionará con la entrada del formulario D[sC] donde D es dólares con separadores de miles opcionales, s es el separador de dólares y centavos y C es centavos de dos dígitos (relleno con cero).
const toCent = amount => { const str = amount.replace(',', '.') return str.length < 3 || str[str.length - 3] == '.' ? Number(str.replace('.', '')) : Number(str.replace('.', ''))*100 } console.log(toCent('45.99')); console.log(toCent('455.000')); console.log(toCent('45.99')/100); console.log(toCent('455.000')/100);