Getal omgezet in 1e+30

Hoe 1e+30te converteren naar 1000000000000000000000000000000

Ik wil het getal zoals het door de gebruiker is ingevoerd, niet converteren zoals 1e+30.

Hoe kan dit worden bereikt? Is er een manier om de werkelijke cijfers weer te geven nadat ze zijn geparseerd tot floatof int?


Antwoord 1, autoriteit 100%

De kernbibliotheek biedt geen ondersteuning voor nummers die niet in het oorspronkelijke type numberpassen, dus u zult waarschijnlijk een bibliotheek van derden willen gebruiken om u te helpen met grote decimalen.

Bijvoorbeeld https://mikemcl.github.io/decimal.js/

new Decimal('1e+30').toFixed()
// "1000000000000000000000000000000"

Antwoord 2, autoriteit 80%

U kunt toLocaleStringgebruiken

(1000000000000000000000000000000).toLocaleString("en-US", { useGrouping: false })

Antwoord 3, autoriteit 60%

U kunt gebruik maken van new Array()en String.replace, maar deze heeft alleen de vorm String

function toNum(n) {
   var nStr = (n + ""); 
   if(nStr.indexOf(".") > -1) 
      nStr = nStr.replace(".","").replace(/\d+$/, function(m){ return --m; });
   return nStr.replace(/(\d+)e\+?(\d+)/, function(m, g1, g2){
      return g1 + new Array(+g2).join("0") + "0";
   })
}
console.log(toNum(1e+30)); // "1000000000000000000000000000000"

Nu is het robuuster omdat het niet faalt, zelfs als een heel groot aantal zoals 12e100dat zal worden geconverteerd naar 1.2e+101, wordt geleverd als de .wordt verwijderd en de laatste reeks cijfers wordt één keer verlaagd. Maar 100% nauwkeurigheid kan nog steeds niet worden gegarandeerd, maar dat komt door beperkingen van floatation-wiskunde in javascript.

Other episodes