在JavaScript中使用科学记数法的陷阱

时间:2017-09-22 14:10:15

标签: javascript syntax scientific-notation

这个问题寻求开发者代码格式化意见。就个人而言,我更喜欢在我的JS代码中使用科学记数法,因为我相信它更具可读性。对我而言,6e8600000000更具可读性。话虽这么说,我只是在寻找JS中用科学记数法指定数字的潜在风险和缺点。我不经常在野外看到它,并且想知道是否有技术推理,或仅仅是因为开发人员的druthers。

3 个答案:

答案 0 :(得分:2)

你没有看到科学记数法“经常在野外”,因为实际上在JS中输入的唯一数字往往是常量:

  • 以代码为中心的常量(例如枚举和级别)往往很小。
  • 物理/数学常数(例如π或e)往往具有高度特异性。

这些都不会从科学记法中获益太多。

我在野外看到Plank's constant'为:

const h = 6.62607004e-34;
console.log('Plank', h);

通常有意义的另一个地方是时间限制,例如一天中ms的数量为864e5。例如:

function addDaysToDate(date, days) {
  if (days === 0)
    return date;
  date.setTime(864e5 * days + date.valueOf());
  return date;
}

const now = new Date();
const thisTimeTomorrow = addDaysToDate(now, 1);
console.log('This time tomorrow', thisTimeTomorrow);

我认为没有任何技术理由不使用这种表示法,更多的是开发人员完全避免硬编码。

我认为没有任何风险。你可能不得不小心字符串中的数字,但是如果你这样做,那么这个语法比数字本地化(例如DE用户输入"20.000,00",期待{{1})要小得多。由于不变数字格式交换千位和小数分隔符而获得2e4

我想补充一点,对于小数字,JS默认会输出该语法,但是对于一个点(由浏览器而异),可以避免大量数据:

2e6

答案 1 :(得分:1)

来自O. R. Mapper的this问题:

  

人类用户不是唯一想要阅读数字的人。它似乎   遇到翻译时D3会抛出异常   包含科学记数法坐标的转换

此外,如果您想要更改字符串表示形式,而不是更改源代码中文字的外观,您必须小心序列化/存储数据。

此外,根据经验,您通常可以拥有大数字,其重要性在于其个人数字,如ID或电话号码。在这种情况下,将这些数字减少到科学记数法会损害可读性。

答案 2 :(得分:1)

  

E-notation表示应该乘以10的数字   给定的力量。

不是科学的指数表示法。一个陷阱是e “在JavaScript中以”“的力量提升的十倍不是The number e自然对数的基础,在浏览器中表示为Math.E 。对于熟悉数学常数e的人来说,JavaScript e具有完全不同的含义。 6 * Math.pow(10, 8)返回预期结果,但不包括使用JavaScript工件e

  

虽然E代表指数,但通常会引用符号   作为(科学)电子符号而不是(科学)指数   符号。使用E-notation有助于数据输入和可读性   在文本通信中,因为它最小化击键,避免减少   字体大小,并提供更简单,更简洁的显示,但它是   在出版物中不鼓励。 Submission Guidelines for Authors: HPS 2010 Midyear Proceedings