Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

206
Views
Puntos flotantes en grandes números de una lista de selección (js)

Tengo 2 listas de selección en html, lugar para ingresar un número y segundo lugar para mostrar el resultado. Funciona como una conversión, por lo que cuando eliges milímetros de la primera lista y metros de la segunda, te mostrará el número que ingresaste x 0.001. No hay problema con los números pequeños (hasta 9 dígitos; puedo redondearlos), pero cuando trato de hacer 1 milímetro a 1 yoctómetro (1.0 × 10 -21 milímetros) a veces es correcto, a veces no. Si agrego ceros al yoctómetro, a veces mostrará algo como 0.1 + 0.2 = 0.30000000000000004. El problema es que no puedo redondearlo, porque alguien puede ingresar como 1000 yoctómetros y no funcionará. ¿Hay alguna manera de arreglar esto? (mira milímetros -> centímetros, Math.pow)

 const config = { "milimeters": { "milimeters": v => v * 1, /* this is only an example */ "centimeters": v => v * Math.pow(10, -21), "decimeters": v => v * 0.01, "meters": v => v * 0.001, "dekameters": v => v * 0.0001, "hectometers": v => v * 0.00001, "kilometers": v => v * 0.000001, "inches": v => v * 0.0393700787, "feet": v => v * 0.0032808399, "yards": v => v * 0.0010936133, "miles": v => v * 0.000000621371192, }, } function calculate() { const listFromV = document.getElementById("listFrom").value; const listToV = document.getElementById("listTo").value; const inputPlace = parseFloat(document.getElementById("inputPlace").value); const fn = config[listFromV][listToV]; document.getElementById("resultPlace").innerHTML = fn(inputPlace); if (document.getElementById("inputPlace").value == "") { document.getElementById("resultPlace").innerHTML = "0.00"; } };

Editar:

 1 * Math.pow(10, -21) = 1.0000000000000001e-21 /* not correct */ 1000 * Math.pow(10, -21) = 1e-18 /* correct */ 10 * Math.pow(10, -29) = 1.0000000000000001e-28 /* not correct */ 100 * Math.pow(10, -29) = 1e-27 /* correct */
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Así que hay una manera (gracias a Eric Postpischil).

 v => Number((v * Math.pow(10, -21)).toPrecision(15))

Funciona como debería (.toPrecision(15) es el número máximo que funciona bien) y permite hasta 14 dígitos después del punto

 1 * Math.pow(10, -21) = 1.0000000000000001e-21 /* before */ Number((1 * Math.pow(10, -21)).toPrecision(15)) = 1e-21 /* now */
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!