Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках 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 изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.
На этом изображении показано, что вы ищете. В вашем случае это, очевидно, большие числа, но принцип остается прежним. Примеры ограничений в 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 и т. д. показано двоичное представление чисел.
[/g1]
EDIT: В эйлере проекта вам часто приходится думать о способе работы с числами лагров. Проблемы разработаны с такими большими числами, что вы не можете использовать обычный способ решения проблем. Однако, если вы обнаружите, что вам действительно нужно их использовать, я предлагаю изучить BigInteger в любом случае. Вы найдете его полезным в долгосрочной перспективе, и это еще не все так сложно. Вот ссылка на множество понятных примеров: Пример BigInteger
В математике числа бесконечны. Однако в компьютерах это не так. Для каждого int
-подобного типа существует MAX_VALUE
: int
, short
, long
. Например Integer.MAX_VALUE
. Когда вы пытаетесь увеличить число, превышающее это значение, число становится отрицательным. Таким образом, внутреннее двоичное представление чисел работает.
int i = Integer.MAX_VALUE;
i++; // i becomes negative.
Здесь представлено представление двух дополнений для 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 бит.
Вероятно, вы переполняете размер вашего типа данных, так как наиболее значимым битом является бит знака. Я не думаю, что у Java есть типы данных unsigned
, поэтому вы можете попробовать использовать больший тип данных, например long
, если вы хотите хранить большие числа, чем int
. Если вы все еще переполняете long
, вы в значительной степени застреваете BigInteger
.