避免使用 Number() 进行科学记数法

时间:2021-03-31 04:15:12

标签: javascript angularjs angular

我正在尝试执行以下操作

Number("0.00000000000122") 结果为 1.22e-12

但是我需要的只是那个数字才能从 String 转换为 Number

console.log(Number("0.00000000000122"))

2 个答案:

答案 0 :(得分:2)

你可以这样做:

console.log(Number("0.00000000000122").toFixed(20).replace(/\.?0+$/,""));

说明:

toFixed() 将保留数字,而 replace() 将删除尾随零

编辑:

您似乎希望 Number("0.00000000000122") 的结果既是一个数字,又要保持字符串为“0.00000000000122”,而不是它的科学显示。 在这种情况下,您可以将其保存为 ts 文件中的数字类型变量,然后将其显示为 HTML 中的字符串

答案 1 :(得分:0)

如果你想使用精确的数字,你必须使用整数。

数字不是整数类型,它是一个浮点数,因此数字在内存中表示为浮点数。数字的 toString 方法只是打印出内存中的值。整数位和点位置。

const scale = 18n;
const digits = 10n ** scale;

const POUND = (number) => BigInt(number) * digits;
const toPound = (number, fraction = false) => {
  if (!fraction) {
    return String(number / digits);
  }
  const str = String(number);
  if (scale < 1n) {
    return str;
  }
  return `${str.substring(0, Number(BigInt(str.length) - scale))}.${str.substr(-Number(scale))}`;
};

const a = POUND(11000);
const b = POUND(20000);

console.log('scale', String(scale));
console.log('a', toPound(a));
console.log('b', toPound(b));
console.log('mul', toPound((a * b) / digits));
console.log('add', toPound(a + b));
console.log('div', toPound(b / (a / digits), true));
console.log('sub', toPound(b - a));

相关问题