当前位置: 首页 > 面试题库 >

如何避免在JavaScript中使用科学计数法表示大量数字?

阎建华
2023-03-14
问题内容

当数字变大时,JavaScript会将 大INT 转换为 科学计数法 。如何防止这种情况发生?


问题答案:

有Number.toFixed,但如果数字>=1e21且最大精度为20,它将使用科学计数法。除此之外,您可以自己滚动,但会很混乱。

function toFixed(x) {
  if (Math.abs(x) < 1.0) {
    var e = parseInt(x.toString().split('e-')[1]);
    if (e) {
        x *= Math.pow(10,e-1);
        x = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
    }
  } else {
    var e = parseInt(x.toString().split('+')[1]);
    if (e > 20) {
        e -= 20;
        x /= Math.pow(10,e);
        x += (new Array(e+1)).join('0');
    }
  }
  return x;
}

上面使用便宜的’n’-简单字符串重复((newArray(n+1)).join(str))。您可以定义String.prototype.repeat使用俄罗斯农民乘法,而改为使用它。

此答案应仅适用于以下问题:显示大量而不使用科学计数法。除此之外,您应该使用BigInt库,例如BigNumber,Leemon’s
BigInt或BigInteger。展望未来,新的本地BigInt(注:不是Leemon’s)应该可用;Chromium和基于它的浏览器([Chrome,新的Edge[v79+],Brave)和Firefox均受支持;Safari的支持正在进行中。

这是使用BigInt的方法: BigInt(n).toString()

例:

const n = 13523563246234613317632;

console.log("toFixed (wrong): " + n.toFixed());

console.log("BigInt (right):  " + BigInt(n).toString());

*不过 *请注意
,作为JavaScript数字(不是BigInt)输出的任何大于15-16位(特别是大于Number.MAX_SAFE_INTEGER + 1[9,007,199,254,740,992])的整数都应四舍五入,因为JavaScript的数字类型(IEEE-754双精度)浮点数)不能精确地保存该点以外的所有整数。由于Number.MAX_SAFE_INTEGER + 1它以2的倍数工作,因此它不再容纳奇数(并且类似地,它以18,014,398,509,481,984开始以4的倍数工作,然后是8,然后是16,…)。

因此,如果您可以依靠BigInt支持,则将您的数字作为字符串输出,然后传递给该BigInt函数:

const n = BigInt("YourNumberHere");

例:

const n1 = BigInt(18014398509481985); // WRONG, will round to 18014398509481984

                                      // before `BigInt` sees it

console.log(n1.toString() + " <== WRONG");

const n2 = BigInt("18014398509481985"); // RIGHT, BigInt handles it

console.log(n2.toString() + " <== Right");


 类似资料:
  • 问题内容: 我该如何显示: 十进制(‘40800000000.00000000000000’)为‘4.08E + 10’? 我已经试过了: 但是它有那些额外的0。 问题答案: 在您的“ 40800000000.00000000000000”中,有许多更重要的零,其含义与任何其他数字相同。这就是为什么您必须明确告诉您要在哪里停止的原因。 如果要自动删除所有尾随零,可以尝试:

  • 问题内容: 我有这种方法: 例如,如果value = 1且scale = 2,则输出为“结果:0.00”。我以为会是1.00E-5。因此,我的疑问是:如果BigDecimal的大小大于某个值(在我的示例中为2),我该如何强制将BigDecimal格式化为科学计数形式? 问题答案: 您可以将搭配使用:

  • 问题内容: 如何抑制dataframe.describe()的科学计数法输出: 我的数据是float64类型: 问题答案: 对于单列: 对于整个DataFrame(如@databyte所建议) 对于整个DataFrame(由@Jayen建议): 当函数描述返回一个数据帧时,以上函数所做的是,它只是将每一行格式化为常规格式。我写这个答案的原因是,我心里有一个想法,那就是计数95等于95.00000e

  • 问题内容: 这是我的代码: 我的商显示为 有什么方法可以压制科学记数法并使其显示为 ?我将使用结果作为字符串。 问题答案: 但是你需要自己管理精度。例如,

  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

  • 问题内容: 我们都知道全局变量只是最佳实践。但是在有些情况下,没有它们很难编写代码。您使用什么技术来避免使用全局变量? 例如,在以下情况下,您将如何不使用全局变量? JavaScript代码: 相关标记: 此代码来自具有多个的网络表单。它一次上传一个文件,以防止大量请求。它通过POST到iframe来完成此操作,等待响应触发iframeonload,然后触发下一个提交。 您不必专门回答此示例,我只