此问题不寻求开发者的代码格式化意见。个人而言,当我可以使用科学计数法时,更喜欢在我的JS代码中使用它,因为我认为它更易读。对于我来说,6e8
比600000000
更容易阅读。 话虽如此,我仅寻找在JS中指定科学计数法数字的潜在风险和缺点。 我很少在实践中看到它,想知道是否有技术上的原因或仅仅是开发者的爱好。
此问题不寻求开发者的代码格式化意见。个人而言,当我可以使用科学计数法时,更喜欢在我的JS代码中使用它,因为我认为它更易读。对于我来说,6e8
比600000000
更容易阅读。 话虽如此,我仅寻找在JS中指定科学计数法数字的潜在风险和缺点。 我很少在实践中看到它,想知道是否有技术上的原因或仅仅是开发者的爱好。
在实际应用中,科学计数法并不常见,因为在JavaScript中实际键入的数字往往是常量:
这些都不太需要使用科学计数法。
我曾经看到过普朗克常数在实际应用中被表示为:
const h = 6.62607004e-34;
console.log('Plank', h);
在IT技术中,另一个常见的应用场景是时间限制,例如一天中的毫秒数可以表示为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”,期望得到2e4,但由于不变的数字格式交换了千位分隔符和小数点,结果得到了2e6)。
我还想补充一点,JS默认情况下会输出该语法以表示较小的数字,但在某个点之后(各个浏览器不同),会避免使用该语法来表示较大的数字:
console.log('Very small', 1234 / 100000000000)
console.log('Large, but still full in some browsers', 1e17 * 1234)
console.log('Large, scientific', 1e35 * 1234)
60e3
ms,通常是一个合理的科学计数法范围内的常量。 - Bergi2e4
(20000)不应该是正确的表示方式吗?而使用英文小数点,则应该是2e1
(20)吧? - Alberto MartinezE-notation 表示一个数应该乘以10的某个次幂。
这不是科学指数表示法。其中一个问题是,在 JavaScript 中,e
表示的是“乘以10的某个次幂”,而不是 自然对数的底数 e
,在浏览器中表示为 Math.E
。对于熟悉数学常数 e
的人来说,JavaScript 中的 e
具有完全不同的含义。6 * Math.pow(10, 8)
返回预期结果,不包括使用 JavaScript 产生的 e
。
来自this问题的O. R. Mapper:
不仅人类用户想要读取数字。当遇到包含科学计数法坐标的翻译变换时,D3会抛出异常。
此外,如果您想更改字符串表示形式,而不仅仅是源代码中的文字外观,则必须小心序列化/存储数据。
此外,根据经验,通常您可能有一些重要程度在于其各个数字(如ID或电话号码)的大量数字。 在这种情况下,将这些数字缩小为科学计数法会影响可读性。