Convert scientific notation to decimal

0

How can I convert a number in scientific notation like 2.6274846602703e-6 to a decimal number using only javascript?

    
asked by anonymous 01.11.2017 / 15:17

3 answers

3

Just do the conversion with the Number() function that will serve any exponent within the limits defined in Number() . See:

var notacao_cientifica = 2.6274846602703e-6;
var string_notacao_cientifica = "2.6274846602703e-6";

var convertido_1 = Number( notacao_cientifica );
console.log( convertido_1 );

var convertido_2 = Number( string_notacao_cientifica );
console.log( convertido_2 )

A answer plus complete , valid for any exponent value, is as follows commented below. But note that the result comes out as string and, to do basic math operations, you need to convert the string to number. And, in doing so, if you exceed the maximum limit set for fractional numbers defined for the language, there will be approximation of the value and even truncation.

To perform such basic mathematical operations in numbers greater than ^ 19 and smaller than ^ -5 without losing precision, it would be necessary to define them manually. It is not easy to process with JavaScript, evading the scope of the language and the question itself. I recommend trying just for learning.

To simply display as a string, there are no problems. It works perfectly.

// Glossário
//
// NNC = Número em Notação Científica
// NCE = notação científica de mantissa E
// BASE = obtido de base()
// expoente() = obtém o expoente do número em NCE
// base() = obtém a base do número em NCE
// inteiro() = obtém parte não fracionária da base
// fracao = obtém parte fracionária da base (em números decimais)
// N = número em NCE

// Valores de exemplo
var a = "2.6274846602703e21";
var b = "2.6274846602703e-7";

// Funções de auxílio
var expoente = function(NNC) {
  return (/[e][-0-9]+$/g.exec(NNC)).toString().slice(1);
};
var base = function(NNC) {
  return (/^\d\.\d+/g.exec(NNC)).toString();
};
var inteiro = function(BASE) {
  return base(BASE).slice(0, 1);
};
var fracao = function(BASE) {
  return base(BASE).slice(2);
};

// Converte números em notação científica de mantissa "E" (E = 10) em forma decimal
var conversor_de_nce = function(N) {

  // Declaração de variáveis
  var delta, R;

  // Obtém dados necessários
  var e = Number(expoente(N));
  var b = base(N);
  var i = inteiro(b);
  var f = fracao(b);

  // Caso de expoentes positivos
  if (e >= 0) {

    // Diferença de dígitos entre a parte fracionária e o valor do expoente
    delta = f.length - e;

    return delta > 0 ? i + f.slice(0, e) + "." + f.slice(e) : i + f + "0".repeat(Math.abs(delta));

    // Caso de expoentes negativos
  } else {
    return "0." + "0".repeat(Math.abs(e) - i.length) + i + f;
  }

};


// Exemplos
console.log("número: \t\t" + a);
console.log("conversor_de_nce: \t" + conversor_de_nce(a));

console.log("---");

console.log("número: \t\t" + b);
console.log("conversor_de_nce: \t" + conversor_de_nce(b));
    
01.11.2017 / 15:41
2

For exponents not too small or too large, a simple value assignment already solves your problem.

let num = 2.6274846602703e-6
console.log(num)
/* 0.0000026274846602703 */
    
01.11.2017 / 15:26
1

You can also use the + sign in front of your string to get a number.

console.log(+2.6274846602703e-6);
console.log(+"2.6274846602703e-6");
    
01.11.2017 / 17:02