foldLeft и reduceLeft возвращает отрицательные значения [duplicate]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

8
задан Zero Piraeus 22 January 2015 в 17:59
поделиться

4 ответа

На этом изображении показано, что вы ищете. В вашем случае это, очевидно, большие числа, но принцип остается прежним. Примеры ограничений в java: int: -2,147,483,648 до 2,147,483,647. long: -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807

На изображении 0000, 0001 и т. д. показано двоичное представление чисел.

Image explaining two's complement [/g1]

EDIT: В эйлере проекта вам часто приходится думать о способе работы с числами лагров. Проблемы разработаны с такими большими числами, что вы не можете использовать обычный способ решения проблем. Однако, если вы обнаружите, что вам действительно нужно их использовать, я предлагаю изучить BigInteger в любом случае. Вы найдете его полезным в долгосрочной перспективе, и это еще не все так сложно. Вот ссылка на множество понятных примеров: Пример BigInteger

13
ответ дан Community 28 August 2018 в 07:32
поделиться

В математике числа бесконечны. Однако в компьютерах это не так. Для каждого int -подобного типа существует MAX_VALUE: int, short, long. Например Integer.MAX_VALUE. Когда вы пытаетесь увеличить число, превышающее это значение, число становится отрицательным. Таким образом, внутреннее двоичное представление чисел работает.

int i = Integer.MAX_VALUE;
i++; // i becomes negative. 
1
ответ дан AlexR 28 August 2018 в 07:32
поделиться

Здесь представлено представление двух дополнений для 2-битного целого: (U означает Unsigned, S означает Signed)

 U | bits |  S
---------------
 0 |  00  |  0 
 1 |  01  |  1 \ overflow here:
 2 |  10  | -2 /   1 + 1 = -2
 3 |  11  | -1

Арифметика выполняется в основном как в неподписанном случае, modulo max (U) (4 в нашем случае).

Логика для больших типов одинакова. int в Java - 32 бит. Используйте long для 64 бит.

3
ответ дан Elazar 28 August 2018 в 07:32
поделиться

Вероятно, вы переполняете размер вашего типа данных, так как наиболее значимым битом является бит знака. Я не думаю, что у Java есть типы данных unsigned, поэтому вы можете попробовать использовать больший тип данных, например long, если вы хотите хранить большие числа, чем int. Если вы все еще переполняете long, вы в значительной степени застреваете BigInteger.

1
ответ дан wlyles 28 August 2018 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: