Javascript Javasctipt科学符号覆盖

Javascript Javasctipt科学符号覆盖,javascript,overriding,scientific-notation,Javascript,Overriding,Scientific Notation,我试图编写一个代码,计算出给定数字中5个连续数字的最大乘积。 我的代码尝试将数字转换为数组,然后通过数组进行for循环,每5个连续的单位数相乘,并将其与最后一个进行比较。 一旦我通过函数的数字超过21位,我猜计算机会将数字转换为科学符号,从而使整个函数失效。 这是代码,它运行良好,有21位: function func(value){ var number = value; console.log(number); var output = []; sNumber

我试图编写一个代码,计算出给定数字中5个连续数字的最大乘积。
我的代码尝试将数字转换为数组,然后通过数组进行for循环,每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);
它开始使用科学记数法。

这是由于Javascript的性质、我使用的计算机、编译器还是其他原因造成的?

与Javascript中使用的基本数据类型的限制一样,您会遇到很多问题。在本例中,它似乎是整数类型的限制

数字132456789001234567890包含在64位整数中。添加另一个数字会将其推入一个无法用这种方式表示的范围,因此需要一个浮点数

在不同的JavaScript引擎中测试时,可能会得到不同的值。超过2147483648的任何内容都可能最终转换为浮点值

当你做数学计算时,尽量避免对它们进行字符串计算。数字的字符串表示形式相当随意,不可信


你应该做的是除以10的某个因子,然后进行模10运算,得到各个数字。

为什么不将输入的数字保留为字符串?@6502我试图输入一个大数字,然后将每个数字作为一个独立的数字处理。因此12345将被视为5个独立的数字:1、2、3、4、5。在64位Safari中,情况似乎就是这样。132456789001234567890最终显示为132456789001234567000。除法和使用模听起来像是我应该走的路,但有没有一种方法可以自信地推翻科学记数法?我意识到我可以使用.toPrecision,但因为我正在处理一个数字,所以我不能使用:
value.toPrecision(value.length)
。我可以简单地数一数数字,但如果数字太大,可能会让人恼火。我也试过。精确到(25)或举例来说,在16位数字之后,计算机似乎是在自己编数字……如果你决心打破真正的大数字,你可以尝试使用。请记住,这些类型通常比本机类型慢得多,但在您的情况下,性能可能是可以接受的。如果您有点不清楚,请不要忘记阅读。如果你不这样做,你会遇到麻烦的。请记住,浮点值始终被视为近似值,因此其中的一部分将“组成”。@tadman关于我对数字中数字的计数问题,我意识到我可以简单地分配一个变量,将数字转换为字符串,并使用该变量的.length off。谢谢所有的链接,我一定会调查的。
func(123465789012345678901);