Javasctipt科学表示法覆盖
Javasctipt scientific notation override
我正试图编写一段代码,计算给定数字中5个连续数字的最大乘积
我的代码试图将数字转换成一个数组,然后在数组中循环,每5个连续的个位数相乘,并将其与最后一个进行比较
一旦我通过函数的数字超过21位,我猜计算机会将数字转换为科学记数法,从而使整个函数失效。
这是代码,它以21位数字运行良好:
function func(value){
var number = value;
console.log(number);
var output = [];
sNumber = number.toString();
console.log(sNumber);
for (var i = 0; i < sNumber.length; i++) {
output.push(+sNumber.charAt(i));
}
console.log(output);
var productToCompare;
var largerProduct = 0;
for (var j = 0; j < output.length - 4; j++) {
productToCompare = output[j]*output[j+1]*output[j+2]*output[j+3]*output[j+4];
console.log(productToCompare);
if (productToCompare > largerProduct) {
largerProduct = productToCompare;
}
}
return largerProduct;
}
func(13245678901234567890);
只要我再加一个数字:
func(123465789012345678901);
它开始使用科学记数法
这是由于Javascript的性质、我使用的计算机、编译器还是什么原因?
与许多事情一样,您将遇到JavaScript中使用的基本数据类型的限制。在这种情况下,它似乎是整数类型的限制。
数字13245678901234567890适用于64位整数。添加另一个数字会将其推入一个无法用这种方式表示的范围,因此需要一个浮点数。
在不同的JavaScript引擎中测试时,可能会得到不同的值。任何超过2147483648的值最终都可能被转换为浮点值。
每当你进行数学计算时,尽量避免对它们进行字符串计算。数字的字符串表示形式相当随意,不值得信任。
你应该做的是除以10的某个因子,然后取模10得到各个数字。
相关文章:
- 在循环中分配json值时,值被覆盖
- 谷歌地图固定位置覆盖
- React中的数据集表示
- 只覆盖箭头键滚动事件
- JQuery覆盖不更改单选选项
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- 传单中如何在更改基层时启用/禁用覆盖层
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- HTML/CSS-用于拖放的全页面覆盖
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 覆盖函数中的函数
- 无法覆盖CSS伪元素:before
- 如何覆盖原型中的事件侦听器
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- 如何覆盖主干中的extend方法
- 覆盖localStorage的点表示法
- Javasctipt科学表示法覆盖