function truncDigits(inputNumber, digits) { const fact = 10 ** digits; return Math.trunc(inputNumber * fact) / fact; } truncDigits(27624.399999999998,2) //27624.4 but I want 27624.39Necesito truncar un valor flotante pero no quiero redondearlo. Por ejemplo 27624.399999999998 // 27624.39 resultado esperado
También Math.trunc da la parte entera correcta, pero cuando Math.trunc valora 2762439.99, no da la parte entera pero da el valor de redondeo, es decir, 2762434
Probablemente una forma ingenua de hacerlo:
function truncDigits(inputNumber, digits) { return +inputNumber.toString().split('.').map((v,i) => i ? v.slice(0, digits) : v).join('.'); } console.log(truncDigits(27624.399999999998,2))Al menos hace lo que pediste
Prueba esto:
function truncDigits(inputNumber, digits){ return parseFloat((inputNumber).toFixed(digits)); } truncDigits(27624.399999999998,2) Sus entradas son number (si está usando mecanografiado). El método toFixed(n) trunca su número en un máximo de n dígitos después del punto decimal y lo devuelve como una cadena. Luego conviertes esto con parseFloat y tienes tu número.
Puede intentar convertir a una cadena y luego usar RegExp para extraer los decimales requeridos
function truncDigits(inputNumber: number, digits: number) { const match = inputNumber.toString().match(new RegExp(`^\\d+\\.[\\d]{0,${digits}}`)) if (!match) { return inputNumber } return parseFloat(match[0]) } Nota: estoy usando la versión de cadena del ctor RegExp ya que la literal no permite parámetros dinámicos.