14.06.2012, 11:09
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Сообщение от devote
|
у подстваил, и что я должен увидеть?
var bla = 1e21;
if ( parseInt( bla ) != bla ) {
alert("bla не целое число");
} else {
alert("bla целое число");
}
|
То, что bla не целое число, хотя оно на самом деле целое.
|
|
14.06.2012, 14:21
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от oneguy
|
То, что bla не целое число, хотя оно на самом деле целое.
|
на самом деле оно у вас в голове целое, как и у нас тоже.. но не в JavaScript у него извините нет столько памяти что бы держать огромные числа с высокой точностью. Он выделяет память под число, и если оно не лезет в выделенный размер, он его режет, от того точность числа сразу же теряется, и для JavaScript оно становится не целым.
Советую почитать литературу по числа в JS.
|
|
14.06.2012, 19:57
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Сообщение от devote
|
на самом деле оно у вас в голове целое, как и у нас тоже.. но не в JavaScript у него извините нет столько памяти что бы держать огромные числа с высокой точностью. Он выделяет память под число, и если оно не лезет в выделенный размер, он его режет, от того точность числа сразу же теряется, и для JavaScript оно становится не целым.
|
В Джаваскрипте числовые значения хранятся в формате double-precision, в котором числа записываются до 52-го двоичного знака после плавающей запятой. Вообще, целые числа для записи в этот формат всегда округляются в целые (или +/-Infinity), но более того, в данном случае числовое значение литерала 1e21 будет в точности 10^21, так как 10^21 меньше 2^70 и делится на 2^21, то есть все единицы в двоичной записи числа 10^21 находятся с 21-го по 69-ый разряды, что в разности даёт не больше 52.
|
|
14.06.2012, 20:25
|
|
Аспирант
|
|
Регистрация: 21.05.2012
Сообщений: 89
|
|
Во сделал своим методом
bla1=4.5;
bla2=4.0;
if(/^[0-9][.][1-9]/.test(bla1)) {alert('bla1 ne celoe chislo');
}
else { alert('bla1 celoe chislo');}
if(/^[0-9][.][1-9]/.test(bla2)) {alert('bla2 ne celoe chislo');
}
else { alert('bla2 celoe chislo');}
|
|
14.06.2012, 20:29
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
oneguy,
ну да вы правы.. для числа с 20-ю нулями конечно вариант говно.
var bla = 1e21;
if ( Math.round( bla ) != bla ) {
alert("bla не целое число");
} else {
alert("bla целое число");
}
var bla = 1.1;
if ( Math.round( bla ) != bla ) {
alert("bla не целое число");
} else {
alert("bla целое число");
}
var bla = "15";
if ( Math.round( bla ) != bla ) {
alert("bla не целое число");
} else {
alert("bla целое число");
}
|
|
14.06.2012, 21:08
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Вот и прекрасно! По-видимому, лучшего способа, чем через Math.floor, Math.ceil или Math.round, не существует.
Последний раз редактировалось oneguy, 14.06.2012 в 21:11.
|
|
14.06.2012, 21:28
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Столько вариантов и почему-то никто не воспользовался тем, что остаток от деления целого числа на 1 равен 0
function isInt(x) {return x % 1 == 0}
|
|
14.06.2012, 21:41
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Да, действительно, это ещё одно решение.
|
|
14.06.2012, 22:56
|
|
Аспирант
|
|
Регистрация: 21.05.2012
Сообщений: 89
|
|
Сообщение от Octane
|
Столько вариантов и почему-то никто не воспользовался тем, что остаток от деления целого числа на 1 равен 0
function isInt(x) {return x % 1 == 0}
|
нее.. тут хитро. а если нецелое число = 5,2552. Тогда при делении на 1 частное не будет равно нулю. Тогда тоже надо писать функцию для проверки целое частное или нет
|
|
14.06.2012, 22:59
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
лучше проверять, прежде чем писать
|
|
|
|