【问题标题】:Avoid Number() for scientific notation [closed]避免使用科学记数法使用 Number() [关闭]
【发布时间】:2021-03-31 04:15:12
【问题描述】:

我正在尝试执行以下操作

Number("0.00000000000122") 导致1.22e-12

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

console.log(Number("0.00000000000122"))

【问题讨论】:

  • 这个符号只是你想看到的数字的表示,不用担心,即使你在控制台输入数字 0.00000000000122 你也会得到 1.22e-12
  • 顺便说一句,除非你有充分的理由,否则一般建议不要使用 Number() 构造函数。我们可以使用“一元+运算符”和parseInt全局函数将字符串转换为原始数字而不是数字对象。
  • @Cat parseInt() 用于整数;在这种情况下,它不起作用。此外,parseInt()parseFloat() 都有一个缺点(在某些情况下),它们接受诸如“123hello”之类的输入并返回数字 123 而不会出错。

标签: javascript angularjs angular


【解决方案1】:

你可以这样做:

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

解释:

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

编辑:

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

【讨论】:

  • 然后它会在转换成 Number 时去掉最后的零。
【解决方案2】:

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

数字不是整数类型,它是浮点数,因此数字在内存中表示为浮点数。数字的 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多