1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
program UpdateGraph; uses Graph,Crt; var xMax,yMax,i:integer; st:string[10]; x:extended; procedure GraphInit; var grDriver,grMode,ErrCode: integer; begin grDriver := Detect; InitGraph(grDriver, grMode,''); ErrCode := GraphResult; if ErrCode <> grOk then begin Writeln('Graphics error:', GraphErrorMsg(ErrCode)); ReadKey; Halt; end; xMax:=GetMaxX; yMax:=GetMaxY; end; procedure Body;{MainForm} begin Line(xMax-140,3,xMax-140,yMax-3); Line(62,450,xMax-140,450); OutTextXY(508,10,'y = a*cos(x)+b*x'); OutTextXY(507,300,'a ='); OutTextXY(507,317,'b ='); OutTextXY(386,461,'Close'); Rectangle(380,455,430,474); OutTextXY(186,461,'Input'); Rectangle(180,455,230,474); OutTextXY(266,461,'Clear'); Rectangle(260,455,310,474); OutTextXY(536,34,'x'); OutTextXY(590,34,'y'); Line(516,45,623,45); Line(562,30,562,270); Rectangle(xMax-123,30,xMax-16,270); end; procedure Coord;{CoordinateNet} var NumHoriz,NumVert:string[10]; begin for i:=-10 to 10 do begin Str(i,NumHoriz); case i of 0..9:OutTextXY(270+(21*i),438,NumHoriz); 10:OutTextXY(475,438,NumHoriz); -9..-1:OutTextXY(262+(21*i),438,NumHoriz); end; end; for i:=-10 to 10 do begin Str(i*10,NumVert); case i of -9..-1:OutTextXY(33,221+(-21*i),NumVert); 0:OutTextXY(48,222,NumVert); 1..9:OutTextXY(40,220+(-21*i),NumVert); 10:OutTextXY(33,12,NumVert); end; end; SetColor(DarkGray); Rectangle(62,14,482,433); {Vertical lines} for i:=1 to 20 do begin case i of 1..10:Line(41+(21*i),14,41+(21*i),433); 12..19:Line(41+(21*i),14,41+(21*i),433); 20:Line(41+(21*i),35,41+(21*i),433); end; end; {Horizontal lines} for i:=1 to 19 do begin case i of 1..9:Line(63,14+(21*i),482,14+(21*i)); 11..19:Line(63,14+(21*i),482,14+(21*i)); end; end; SetColor(LightGreen); Line(272,14,272,433); Line(62,225,482,225); SetColor(White); end; procedure xValues; begin for i:=1 to 21 do begin x:=-11+i; Str(x:2:0,st); OutTextXY(530,44+(10*i),st); end; end; Begin GraphInit; Body; Coord; xValues; ReadKey; End. |
От автора: В данной статье мы познакомимся со специальным свойством NaN (Not-A-Number), которое является значением, представляющим не-число.
Тип числа в JavaScript содержит целые числа и числа с плавающей запятой:
const integer = 4; const float = 1.5; typeof integer; // => ‘number’ typeof float; // => ‘number’ |
Плюс есть два специальных числовых значения: Infinity (число больше, чем любое другое число) и NaN (представляющее концепцию «не число»):
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
const infinite = Infinity; const faulty = NaN; typeof infinite; // => ‘number’ typeof faulty; // => ‘number’ |
Хотя непосредственная работа с NaN редко встречается, оно может неожиданно появиться после неудачной операции с числами.
Давайте подробно рассмотрим специальное значение NaN: как проверить, содержит ли переменная NaN, и сценарии, которые в которых генерируется значения «не число».
1. Число NaN
Тип числа в JavaScript — это набор всех числовых значений, включая «не число», положительную бесконечность и отрицательную бесконечность.
«Not A Number» можно получить с помощью специального выражения NaN или как свойство глобального объекта или функции Number:
typeof NaN; // => ‘number’ typeof window.NaN; // => ‘number’ typeof Number.NaN; // => ‘number’ |
«Не число» — это значение, которое не представляет действительное число, несмотря на то, что оно имеет тип числа. Через NaN полезно представлять ошибочные операции с числами. Например, умножение числа на undefined не является допустимой операцией, поэтому дает NaN:
Также попытка разобрать недопустимую числовую строку, например, ‘Joker’ приводит к NaN:
parseInt(‘Joker’, 10); // => NaN |
2. Проверка на равенство с NaN
Интересным свойством NaN является то, что оно не равно ни одному значению, даже самому себе:
Это поведение полезно для определения, является ли переменная NaN:
const someNumber = NaN; if (someNumber !== someNumber) { console.log(‘Is NaN’); } else { console.log(‘Is Not NaN’); } // logs «Is NaN» |
Выражение someNumber !== someNumber равно true, только если someNumber является NaN. Таким образом, приведенный выше фрагмент регистрирует в консоли «Is NaN». JavaScript содержит встроенные функции для определения NaN: isNaN() и Number.isNaN():
isNaN(NaN); // => true isNaN(1); // => false Number.isNaN(NaN); // => true Number.isNaN(1); // => false |
Разница между этими функциями заключается в том, что Number.isNaN() не преобразуется свой аргумент в число:
isNaN(‘Joker12’); // => true Number.isNaN(‘Joker12’); // => false |
isNaN(‘Joker12’) преобразует аргумент ‘Joker12’ в число, которое является NaN. Таким образом, функция возвращает true.
С другой стороны, Number.isNaN(‘Joker12’) проверяет аргумент без преобразования. Функция возвращает false, потому ‘Joker12’ не равно NaN.
3. Операции, дающие NaN
3.1 Парсинг чисел
В JavaScript вы можете преобразовать числовые строки в числа. Например, вы можете легко преобразовать строку ‘1.5’ в число с плавающей запятой 1.5:
const numberString = ‘1.5’; const number = parseFloat(numberString); number; // => 1.5 |
Когда строка не может быть преобразована в число, функция синтаксического анализа возвращает NaN: указывая, что синтаксический анализ не выполнен. Вот некоторые примеры:
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
parseFloat(‘Joker12.5’); // => NaN parseInt(‘Joker12’, 10); // => NaN Number(‘Joker12’); // => NaN |
При парсинге чисел рекомендуется проверить, не является ли результат парсинга NaN:
let inputToParse = ‘Invalid10’; let number; number = parseInt(inputToParse, 10); if (isNaN(number)) { number = 0; } number; // => 0 |
Парсинг inputToParse не удался, поэтому parseInt(inputToParse, 10) возвращается NaN. Условие if (isNaN(number)) оценивается, как true, и 0 назначается number.
3.2 undefined в качестве операнда
При использовании undefined в качестве операнда в арифметических операциях, таких как сложение, умножение и т д. мы получаем NaN. Например:
function getFontSize(style) { return style.fontSize; } const fontSize = getFontSize({ size: 16 }) * 2; const doubledFontSize = fontSize * 2; doubledFontSize; // => NaN |
getFontSize() — это функция, которая обращается к свойству fontSize из объекта стиля. При вызове getFontSize({ size: 16 }) результатом будкт undefined (свойство fontSize не существует в объекте { size: 16 }). fontSize * 2 оценивается как undefined * 2, что дает NaN.
«Not A Number» генерируется, когда в качестве значения в арифметических операциях используется отсутствующее свойство или функция, возвращающая undefined. Отсутствие undefined в арифметических операциях — это хороший способ предотвратить получение NaN.
3.3 NaN как операнд
Значение NaN также генерируется, когда операндом в арифметических операциях является NaN:
1 + NaN; // => NaN 2 * NaN; // => NaN |
NaN распространяется на арифметические операции:
let invalidNumber = 1 * undefined; let result = 1; result += invalidNumber; // appendresult *= 2; // duplicate result++; // increment result; // => NaN |
Операции с переменной result прерываются после добавления к result значения invalidNumber (которое является NaN).
3.4 Неопределенные формы
Значение NaN создается, когда арифметические операции имеют неопределенные формы. Деление 0 / 0 и Inifinity / Infinity:
0 / 0; // => NaN Infinity / Infinity; // => NaN |
Умножение 0 и Infinity:
Сложение бесконечных чисел с разными знаками:
—Infinity + Infinity; // => NaN |
3.5 Неверные аргументы математических функций
Квадратный корень из отрицательного числа:
Math.pow(—2, 0.5); // => NaN (—2) ** 0.5; // => NaN |
Или логарифм отрицательного числа:
4. Заключение
Понятие «не число», выраженное в JavaScript с помощью NaN, полезно для представления ошибочных операций над числами. NaN не равно ни одному значению, даже самому себе. Рекомендуемый способ проверить, содержит ли переменная NaN — использовать Number.isNaN(value).
Преобразование числовых строк в числа, в случае неудачи может дать NaN. Рекомендуется проверять, не возвращают ли parseInt(), parseFloat() или Number() NaN.
Если undefined или NaN используются в качестве операнда в арифметических операциях, это обычно приводит к NaN. Правильная обработка undefined (предоставление значений по умолчанию для отсутствующих свойств) является рекомендованным подходом для предотвращения этой ситуации.
Неопределенные формы или недопустимые аргументы для математических функций также приводят получению NaN. Но это случается редко. Вот мой практический совет: «Получили NaN? Ищите undefined!»
Автор: Dmitri Pavlutin
Источник: //dmitripavlutin.com
Редакция: Команда webformyself.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Смотреть
Неописанная переменная
begin S := 1; // Неизвестное имя S end.
Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).
Отсутствующая ;
begin var S: integer S := 1; // Компилятор здесь скажет: Ожидалась ; — имеется ввиду предыдущая строка! end.
begin var S := 1 S := S + 1 // Аналогично: проблема на предыдущей строке, а на текущей нет, потому что после неё идёт end. end.
Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.
Несовместимость типов при присваивании
begin var S: integer := 1.3; // Нельзя преобразовать тип real к integer end.
Безболезненно можно присваивать только данные одного типа. Если данные — разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ — в строку. Обратные преобразования не допускаются.
Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:
begin var S := 1.3; // Тип real будет выведен компилятором автоматически end.
Отсутствие закрывающего апострофа литеральной строки
begin var x := 2; // x получает тип integer var y := 3; // y получает тип integer writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа end.
Закрыть апостроф надо на той же строке, где расположен открывающий апостроф
Ошибки расстановки запятых и апострофов при выводе строк и выражений
begin var x := 2; // x получает тип integer var y := 3; // y получает тип integer writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов end.
Слишком много запятых и апострофов рядом, потому начинающие часто путаются
Надо уяснить правила:
- запятые разделяют разные элементы вывода
- все, что находится в апострофах, будет выведено на экран без изменений
Ошибка ввода
begin var x: integer; read(x); // введите блаблабла и посмотрите, что получится end.
Это — ошибка во время выполнения. Программа пытается преобразовать введенную строку в число, не может это сделать и завершается с ошибкой.
Аналогичный фрагмент в более современном и предпочтительном синтаксисе:
begin var x := ReadInteger; end.
Ошибка неинициализированной переменной
begin var x: integer; // Забыли инициализировать или ввести x var r := x * x; // r получает тип integer writeln('Квадрат числа ', x, ' = ', r); end.
Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.
Деление на 0
begin var x := 0; var c := 666 div x; // Здесь происходит деление на 0 end.
Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.
Корень из отрицательного числа
begin writeln(sqrt(-1)); // Корень из отрицательного числа end.
В обычном Паскале возникает ошибка времени выполнения.
В PascalABC.NET выводится NaN — Not a Number
Ссылки
- Программы для начинающих
- Сайт PascalABC.NET: Программы и алгоритмы для начинающих
При таком коде:
while(u)
{
sum += u->d.a;
++count;
}
u в цикле не меняется, поэтому мы получим бесконечный цикл, если u != 0
либо, если u == 0
совсем не зайдем в цикл, и в дальнейшем получим деление нуля на ноль, что в результате дает значение «не является числом» (Not-a-Number, NaN).
Из википедии:
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
- …
- деление нуля на ноль
Подробнее о делении нуля на нуль
u
в Вашем коде равен нулю потому, что в цикле вывода Вы его меняете:
while(u)
{
cout << u->d.a << endl;
u = u->next;
}
после этого цикла u
будет равен нулю.
Для исправления чуть переделаем код:
// Vivod (prosto idem po spisku)
List *p = u;//введем указатель, который будем использовать для прохода по списку перед выводом
while (p) {//В цикле работаем только с p, а не с u
cout << p->d.a << endl;
p = p->next;
}
// srednee arifm
if (u) {//Список не пуст
int sum = 0, count = 0;
p = u;//снова ставим p в равным u, для прохода с начала списка
while(p)//в цикле также работаем с p, а не с u
{
sum += p->d.a;
++count;
p = p->next;//не забываем перейти к следующему элементу
}
cout << "Average = " << double(sum)/count << endl;
} else {
cout << "Empty list" << endl;
}
Также Вы забыли про освобождение памяти.
Но в любом случае, Ваш список — это подход, скорее, для языка C, а не для C++.
Improve Article
Save Article
Improve Article
Save Article
NaN, an acronym for Not a Number is an exception that usually occurs in the cases when an expression results in a number that is undefined or can’t be represented. It is used for floating-point operations. For example:
- The square root of negative numbers
- Division by zero
- Taking the log of zero or a negative number etc.
CPP
#include <cmath>
#include <iostream>
using
namespace
std;
int
main()
{
float
a = 2, b = -2;
cout <<
sqrt
(a) << endl;
cout <<
sqrt
(b) << endl;
return
0;
}
How to check for NaN in C++?
Method 1: Using compare (“==”) operator.
In this method, we check if a number is complex by comparing it with itself. If the result is true, then the number is not complex i.e., real. But if the result is false, then “nan” is returned, i.e. the number is complex.
CPP
#include <cmath>
#include <iostream>
using
namespace
std;
int
main()
{
float
a =
sqrt
(2);
float
b =
sqrt
(-2);
a == a ? cout <<
"Its a real number"
<< endl
: cout <<
"Its NaN"
<< endl;
b == b ? cout <<
"Its a real number"
<< endl
: cout <<
"Its NaN"
<< endl;
return
0;
}
Output
Its a real number Its NaN
Method 2: Using inbuilt function “isnan()”
Another way to check for NaN is by using “isnan()” function, this function returns true if a number is complex else it returns false. This C library function is present in <cmath> header file.
CPP
#include <cmath>
#include <iostream>
using
namespace
std;
int
main()
{
float
a =
sqrt
(2);
float
b =
sqrt
(-2);
isnan(a) ? cout <<
"Its NaN"
<< endl
: cout <<
"Its a real number"
<< endl;
isnan(b) ? cout <<
"Its NaN"
<< endl
: cout <<
"Its a real number"
<< endl;
return
0;
}
Output
Its a real number Its NaN
This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Improve Article
Save Article
Improve Article
Save Article
NaN, an acronym for Not a Number is an exception that usually occurs in the cases when an expression results in a number that is undefined or can’t be represented. It is used for floating-point operations. For example:
- The square root of negative numbers
- Division by zero
- Taking the log of zero or a negative number etc.
CPP
#include <cmath>
#include <iostream>
using
namespace
std;
int
main()
{
float
a = 2, b = -2;
cout <<
sqrt
(a) << endl;
cout <<
sqrt
(b) << endl;
return
0;
}
How to check for NaN in C++?
Method 1: Using compare (“==”) operator.
In this method, we check if a number is complex by comparing it with itself. If the result is true, then the number is not complex i.e., real. But if the result is false, then “nan” is returned, i.e. the number is complex.
CPP
#include <cmath>
#include <iostream>
using
namespace
std;
int
main()
{
float
a =
sqrt
(2);
float
b =
sqrt
(-2);
a == a ? cout <<
"Its a real number"
<< endl
: cout <<
"Its NaN"
<< endl;
b == b ? cout <<
"Its a real number"
<< endl
: cout <<
"Its NaN"
<< endl;
return
0;
}
Output
Its a real number Its NaN
Method 2: Using inbuilt function “isnan()”
Another way to check for NaN is by using “isnan()” function, this function returns true if a number is complex else it returns false. This C library function is present in <cmath> header file.
CPP
#include <cmath>
#include <iostream>
using
namespace
std;
int
main()
{
float
a =
sqrt
(2);
float
b =
sqrt
(-2);
isnan(a) ? cout <<
"Its NaN"
<< endl
: cout <<
"Its a real number"
<< endl;
isnan(b) ? cout <<
"Its NaN"
<< endl
: cout <<
"Its a real number"
<< endl;
return
0;
}
Output
Its a real number Its NaN
This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
program UpdateGraph; uses Graph,Crt; var xMax,yMax,i:integer; st:string[10]; x:extended; procedure GraphInit; var grDriver,grMode,ErrCode: integer; begin grDriver := Detect; InitGraph(grDriver, grMode,''); ErrCode := GraphResult; if ErrCode <> grOk then begin Writeln('Graphics error:', GraphErrorMsg(ErrCode)); ReadKey; Halt; end; xMax:=GetMaxX; yMax:=GetMaxY; end; procedure Body;{MainForm} begin Line(xMax-140,3,xMax-140,yMax-3); Line(62,450,xMax-140,450); OutTextXY(508,10,'y = a*cos(x)+b*x'); OutTextXY(507,300,'a ='); OutTextXY(507,317,'b ='); OutTextXY(386,461,'Close'); Rectangle(380,455,430,474); OutTextXY(186,461,'Input'); Rectangle(180,455,230,474); OutTextXY(266,461,'Clear'); Rectangle(260,455,310,474); OutTextXY(536,34,'x'); OutTextXY(590,34,'y'); Line(516,45,623,45); Line(562,30,562,270); Rectangle(xMax-123,30,xMax-16,270); end; procedure Coord;{CoordinateNet} var NumHoriz,NumVert:string[10]; begin for i:=-10 to 10 do begin Str(i,NumHoriz); case i of 0..9:OutTextXY(270+(21*i),438,NumHoriz); 10:OutTextXY(475,438,NumHoriz); -9..-1:OutTextXY(262+(21*i),438,NumHoriz); end; end; for i:=-10 to 10 do begin Str(i*10,NumVert); case i of -9..-1:OutTextXY(33,221+(-21*i),NumVert); 0:OutTextXY(48,222,NumVert); 1..9:OutTextXY(40,220+(-21*i),NumVert); 10:OutTextXY(33,12,NumVert); end; end; SetColor(DarkGray); Rectangle(62,14,482,433); {Vertical lines} for i:=1 to 20 do begin case i of 1..10:Line(41+(21*i),14,41+(21*i),433); 12..19:Line(41+(21*i),14,41+(21*i),433); 20:Line(41+(21*i),35,41+(21*i),433); end; end; {Horizontal lines} for i:=1 to 19 do begin case i of 1..9:Line(63,14+(21*i),482,14+(21*i)); 11..19:Line(63,14+(21*i),482,14+(21*i)); end; end; SetColor(LightGreen); Line(272,14,272,433); Line(62,225,482,225); SetColor(White); end; procedure xValues; begin for i:=1 to 21 do begin x:=-11+i; Str(x:2:0,st); OutTextXY(530,44+(10*i),st); end; end; Begin GraphInit; Body; Coord; xValues; ReadKey; End. |
От автора: В данной статье мы познакомимся со специальным свойством NaN (Not-A-Number), которое является значением, представляющим не-число.
Тип числа в JavaScript содержит целые числа и числа с плавающей запятой:
const integer = 4; const float = 1.5; typeof integer; // => ‘number’ typeof float; // => ‘number’ |
Плюс есть два специальных числовых значения: Infinity (число больше, чем любое другое число) и NaN (представляющее концепцию «не число»):
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
const infinite = Infinity; const faulty = NaN; typeof infinite; // => ‘number’ typeof faulty; // => ‘number’ |
Хотя непосредственная работа с NaN редко встречается, оно может неожиданно появиться после неудачной операции с числами.
Давайте подробно рассмотрим специальное значение NaN: как проверить, содержит ли переменная NaN, и сценарии, которые в которых генерируется значения «не число».
1. Число NaN
Тип числа в JavaScript — это набор всех числовых значений, включая «не число», положительную бесконечность и отрицательную бесконечность.
«Not A Number» можно получить с помощью специального выражения NaN или как свойство глобального объекта или функции Number:
typeof NaN; // => ‘number’ typeof window.NaN; // => ‘number’ typeof Number.NaN; // => ‘number’ |
«Не число» — это значение, которое не представляет действительное число, несмотря на то, что оно имеет тип числа. Через NaN полезно представлять ошибочные операции с числами. Например, умножение числа на undefined не является допустимой операцией, поэтому дает NaN:
Также попытка разобрать недопустимую числовую строку, например, ‘Joker’ приводит к NaN:
parseInt(‘Joker’, 10); // => NaN |
2. Проверка на равенство с NaN
Интересным свойством NaN является то, что оно не равно ни одному значению, даже самому себе:
Это поведение полезно для определения, является ли переменная NaN:
const someNumber = NaN; if (someNumber !== someNumber) { console.log(‘Is NaN’); } else { console.log(‘Is Not NaN’); } // logs «Is NaN» |
Выражение someNumber !== someNumber равно true, только если someNumber является NaN. Таким образом, приведенный выше фрагмент регистрирует в консоли «Is NaN». JavaScript содержит встроенные функции для определения NaN: isNaN() и Number.isNaN():
isNaN(NaN); // => true isNaN(1); // => false Number.isNaN(NaN); // => true Number.isNaN(1); // => false |
Разница между этими функциями заключается в том, что Number.isNaN() не преобразуется свой аргумент в число:
isNaN(‘Joker12’); // => true Number.isNaN(‘Joker12’); // => false |
isNaN(‘Joker12’) преобразует аргумент ‘Joker12’ в число, которое является NaN. Таким образом, функция возвращает true.
С другой стороны, Number.isNaN(‘Joker12’) проверяет аргумент без преобразования. Функция возвращает false, потому ‘Joker12’ не равно NaN.
3. Операции, дающие NaN
3.1 Парсинг чисел
В JavaScript вы можете преобразовать числовые строки в числа. Например, вы можете легко преобразовать строку ‘1.5’ в число с плавающей запятой 1.5:
const numberString = ‘1.5’; const number = parseFloat(numberString); number; // => 1.5 |
Когда строка не может быть преобразована в число, функция синтаксического анализа возвращает NaN: указывая, что синтаксический анализ не выполнен. Вот некоторые примеры:
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
parseFloat(‘Joker12.5’); // => NaN parseInt(‘Joker12’, 10); // => NaN Number(‘Joker12’); // => NaN |
При парсинге чисел рекомендуется проверить, не является ли результат парсинга NaN:
let inputToParse = ‘Invalid10’; let number; number = parseInt(inputToParse, 10); if (isNaN(number)) { number = 0; } number; // => 0 |
Парсинг inputToParse не удался, поэтому parseInt(inputToParse, 10) возвращается NaN. Условие if (isNaN(number)) оценивается, как true, и 0 назначается number.
3.2 undefined в качестве операнда
При использовании undefined в качестве операнда в арифметических операциях, таких как сложение, умножение и т д. мы получаем NaN. Например:
function getFontSize(style) { return style.fontSize; } const fontSize = getFontSize({ size: 16 }) * 2; const doubledFontSize = fontSize * 2; doubledFontSize; // => NaN |
getFontSize() — это функция, которая обращается к свойству fontSize из объекта стиля. При вызове getFontSize({ size: 16 }) результатом будкт undefined (свойство fontSize не существует в объекте { size: 16 }). fontSize * 2 оценивается как undefined * 2, что дает NaN.
«Not A Number» генерируется, когда в качестве значения в арифметических операциях используется отсутствующее свойство или функция, возвращающая undefined. Отсутствие undefined в арифметических операциях — это хороший способ предотвратить получение NaN.
3.3 NaN как операнд
Значение NaN также генерируется, когда операндом в арифметических операциях является NaN:
1 + NaN; // => NaN 2 * NaN; // => NaN |
NaN распространяется на арифметические операции:
let invalidNumber = 1 * undefined; let result = 1; result += invalidNumber; // appendresult *= 2; // duplicate result++; // increment result; // => NaN |
Операции с переменной result прерываются после добавления к result значения invalidNumber (которое является NaN).
3.4 Неопределенные формы
Значение NaN создается, когда арифметические операции имеют неопределенные формы. Деление 0 / 0 и Inifinity / Infinity:
0 / 0; // => NaN Infinity / Infinity; // => NaN |
Умножение 0 и Infinity:
Сложение бесконечных чисел с разными знаками:
—Infinity + Infinity; // => NaN |
3.5 Неверные аргументы математических функций
Квадратный корень из отрицательного числа:
Math.pow(—2, 0.5); // => NaN (—2) ** 0.5; // => NaN |
Или логарифм отрицательного числа:
4. Заключение
Понятие «не число», выраженное в JavaScript с помощью NaN, полезно для представления ошибочных операций над числами. NaN не равно ни одному значению, даже самому себе. Рекомендуемый способ проверить, содержит ли переменная NaN — использовать Number.isNaN(value).
Преобразование числовых строк в числа, в случае неудачи может дать NaN. Рекомендуется проверять, не возвращают ли parseInt(), parseFloat() или Number() NaN.
Если undefined или NaN используются в качестве операнда в арифметических операциях, это обычно приводит к NaN. Правильная обработка undefined (предоставление значений по умолчанию для отсутствующих свойств) является рекомендованным подходом для предотвращения этой ситуации.
Неопределенные формы или недопустимые аргументы для математических функций также приводят получению NaN. Но это случается редко. Вот мой практический совет: «Получили NaN? Ищите undefined!»
Автор: Dmitri Pavlutin
Источник: //dmitripavlutin.com
Редакция: Команда webformyself.
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Смотреть
import pandas as pd
data = {'kol_click':[1, 8, 4, 2, 1, '', 18, '', 3, 10]}
df1 = pd.DataFrame(data)
df1['kol_click_1'] = df1['kol_click'].str.replace('', '0')
print(df1.head(10))
kol_click kol_click_1
0 1 NaN
1 8 NaN
2 4 NaN
3 2 NaN
4 1 NaN
5 0
6 18 NaN
7 0
8 3 NaN
9 10 NaN
Почему числа поменялись на NaN ? Как заменить пустые строки на нулевые значения?
задан 3 мар 2020 в 13:23
1
Проблема вызвана смешением целых чисел и строк в одном столбце. Pandas воспринимает тип такого столбеца как object
:
In [17]: df1.dtypes
Out[17]:
kol_click object
dtype: object
Но комфортно работать c таким столбцом как с обычным строковым столбцом не получится:
In [25]: df1['kol_click'].str[:10]
Out[25]:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5
6 NaN
7
8 NaN
9 NaN
Name: kol_click, dtype: object
In [26]: df1['kol_click'].astype(str).str[:10]
Out[26]:
0 1
1 8
2 4
3 2
4 1
5
6 18
7
8 3
9 10
Name: kol_click, dtype: object
Решение — попробуйте так:
In [22]: df1['kol_click_1'] = pd.to_numeric(df1['kol_click'], errors='coerce').fillna(0)
In [23]: df1
Out[23]:
kol_click kol_click_1
0 1 1.0
1 8 8.0
2 4 4.0
3 2 2.0
4 1 1.0
5 0.0
6 18 18.0
7 0.0
8 3 3.0
9 10 10.0
In [24]: df1.dtypes
Out[24]:
kol_click object
kol_click_1 float64
dtype: object
0xdb
51.3k194 золотых знака56 серебряных знаков227 бронзовых знаков
ответ дан 3 мар 2020 в 13:36
1
Что такое NaN?
NaN, аббревиатура от «Not a Number», является исключением, которое обычно возникает в тех случаях, когда выражение приводит к числу, которое невозможно представить. Например, квадратный корень из отрицательных чисел.
#include<iostream>
#include<cmath> // for sqrt()
using
namespace
std;
int
main()
{
float
a = 2, b = -2;
cout <<
sqrt
(a) << endl;
cout <<
sqrt
(b) << endl;
return
0;
}
Выход:
1,41421 -нан
Как проверить NaN?
Метод 1. Использование оператора сравнения («==»).
В этом методе мы проверяем, является ли число сложным, сравнивая его с самим собой. Если результат верен, то число не комплексное, то есть действительное. Но если результат ложный, то возвращается «нан», т.е. число комплексное.
#include<iostream>
#include<cmath> // for sqrt()
using
namespace
std;
int
main()
{
float
a =
sqrt
(2);
float
b =
sqrt
(-2);
a==a? cout <<
"Its a real number"
<< endl:
cout <<
"Its NaN"
<< endl;
b==b? cout <<
"Its a real number"
<< endl:
cout <<
"Its NaN"
<< endl;
return
0;
}
Выход:
Its a real number Its NaN
Метод 2: Использование встроенной функции isnan ().
Другой способ проверить NaN — использовать функцию «isnan ()», эта функция возвращает истину, если число сложное, иначе она возвращает ложь.
#include<iostream>
#include<cmath> // for sqrt() and isnan()
using
namespace
std;
int
main()
{
float
a =
sqrt
(2);
float
b =
sqrt
(-2);
isnan(a)? cout <<
"Its NaN"
<< endl:
cout <<
"Its a real number"
<< endl;
isnan(b)? cout <<
"Its NaN"
<< endl:
cout <<
"Its a real number"
<< endl;
return
0;
}
Выход:
Это реальное число Его NaN
Автором этой статьи является Манджит Сингх. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью метода влиятельности. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Глобальное свойство NaN
— это значение, представляющее Not-A-Number.
Атрибуты свойства NaN
|
|
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
Try it
Description
NaN
— это свойство глобального объекта . Другими словами, это переменная в глобальной области видимости.
Начальное значение NaN
равно Not-A-Number — то же, что и значение Number.NaN
. В современных браузерах NaN
является ненастраиваемым и недоступным для записи свойством. Даже если это не так, избегайте переопределения. NaN
в программе довольно редко .
Существует пять различных типов операций, возвращающих NaN
:
- Число не может быть проанализировано (например,
parseInt("blabla")
илиNumber(undefined)
) - Математическая операция, результат которой не является действительным числом (например,
Math.sqrt(-1)
) - Операнд аргумента —
NaN
(например,7 ** NaN
) - Неопределенная форма (например,
0 * Infinity
илиundefined + undefined
) - Любая операция, которая включает строку и не является операцией сложения (например,
"foo" / 3
)
Examples
Тестирование против NaN
NaN
сравнивает unequal (через ==
, !=
, ===
и !==
) с любым другим значением, в том числе с другим значением NaN
. Используйте Number.isNaN()
или isNaN()
, чтобы наиболее четко определить, является ли значение NaN
. Или выполните самосравнение: NaN
и только NaN
будут сравниваться неравно самому себе.
NaN === NaN; Number.NaN === NaN; isNaN(NaN); isNaN(Number.NaN); Number.isNaN(NaN); function valueIsNaN(v) { return v !== v; } valueIsNaN(1); valueIsNaN(NaN); valueIsNaN(Number.NaN);
Однако обратите внимание на разницу между isNaN()
и Number.isNaN()
: первый вернет true
если значение в настоящее время равно NaN
, или если оно будет NaN
после приведения его к числу, а последнее вернет true
только если значение в настоящее время NaN
:
isNaN('hello world'); Number.isNaN('hello world');
По той же причине использование значения bigint
вызовет ошибку с isNaN()
, а не с Number.isNaN()
:
isNaN(1n); Number.isNaN(1n);
Кроме того, некоторые методы массива не могут найти NaN
, а другие -.
const arr = [2, 4, NaN, 12]; arr.indexOf(NaN); arr.includes(NaN); arr.findIndex((n) => Number.isNaN(n));
Specifications
Browser compatibility
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | Deno | Node.js | |
NaN |
1 |
12 |
1 |
4 |
4 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
See also
Number.NaN
Number.isNaN()
isNaN()
JavaScript
-
Math.tanh()
Функция Math.tanh()возвращает гиперболический тангенс числа,то есть tanh x sinh cosh e 2 1 frac{sinh x}{cosh {e^x frac{e^{2x}1}{e^{2x}+1}Число.
-
Math.trunc()
Функция Math.trunc()возвращает целую часть числа,удаляя все дробные цифры.
-
Number
Number-это примитивный объект-обертка,используемый для представления и манипулирования числами,такими как 37 -9.25.
-
Number.EPSILON
Свойство Number.EPSILON представляет разницу между 1 и наименьшим значением с плавающей точкой больше чем Вы не должны создавать объект Number для доступа к этому свойству.
В JS проверка на NaN затруднена там, что это тип данных, который равняется «ничем». NaN — это «Not a Number» и переводится как «не число». Обычно такое значение возвращается, когда невозможно завершить работу математической функции или когда в значении математической функции расположено «не число». На практике, NaN появляется тогда, когда в JS-скрипте появляется ошибка.
Может возникнуть простой вопрос: для чего в JavaScript NaN, если это не число, не строка и даже не «пустота»? NaN редко когда применяется специально. А его история возникновения тянется еще с первых лет создания JavaScript. Те, кто работает с JavaScript, знают, что это не строгий и многое прощающий язык программирования. NaN в него был введен для того, чтобы в случае возникающих ошибок в скрипте, программа не оканчивала собственное выполнение, а продолжала работать вернув в качестве значения ошибки NaN.
Проверка на NaN в JS
Проверка на NaN в JS осложнена тем, что это значение не равняется ни какому другому значению, в том числе самому себе. То есть выражение «NaN===NaN» вернет «false». Поэтому проверка на NaN при помощи простого сравнения невозможна. Лучше уж применять функцию «isNaN()» или метод «Number.isNaN()». Но и тот, и другой способ нужно применять осторожно, потому что каждый из них по-своему специфичен. Например:
функция «isNaN()» при проверке вернет «true» в двух случаях: если при проверке значение уже NaN и если оно станет NaN после попытки преобразования его в число;
метод «Number.isNaN()» вернет «true» только если значение при проверке уже является NaN.
В общем, с такими способами проверки может сложиться такая ситуация:
isNaN(‘Привет, Дормидонт!’); //в результате вернет «true»
Number.isNaN(‘Привет, Дормидонт!’); // в результате вернет «false»
Проверка на NaN в JavaScript: безотказный метод
Проверка на NaN в JS возможна, но для этого нужно выстраивать специфичные конструкции из кода. Например, можно попробовать такую конструкцию:
function sanitise(a) {
if (isNaN(a)) {
return NaN;
}
return a;
}
console.log(sanitise(‘тут введите какое-то значение’));
Вы можете попробовать этот скрипт в действии и в функции «console.log()» ввести разные значения: строки, числа, NaN, underfilled и др. Таким образом вы сможете убедиться, что такая проверка на NaN в JS работает безотказно.
Заключение
Сегодня мы познакомились с таким типом данных в JavaScript, как NaN. Самое важное, что теперь вы знаете как проводится проверка на NaN в JS. Она нужна не часто, так как NaN — это специфическое значение, которое получается самостоятельно, но может быть полезной.
PavelNovichok 22 / 22 / 7 Регистрация: 04.07.2015 Сообщений: 161 |
||||||||
1 |
||||||||
25.06.2016, 11:15. Показов 5294. Ответов 3 Метки нет (Все метки)
Здравствуйте!
Вот скриншот:
__________________ 0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
25.06.2016, 11:15 |
Ответы с готовыми решениями: Почему выражение возвращает NaN? Все скобки стоят правильно, не пойму из-за чего… значение NaN Выдает NaN Проверка на NaN 3 |
dzendev 181 / 103 / 48 Регистрация: 12.03.2016 Сообщений: 260 |
||||
25.06.2016, 19:07 |
2 |
|||
Я бы начал с этой строчки кода:
Если пользователь добавит только один товар, а затем нажмёт «Подсчитать», эта строка кода выдаст NaN. 0 |
22 / 22 / 7 Регистрация: 04.07.2015 Сообщений: 161 |
|
25.06.2016, 21:31 [ТС] |
3 |
Но один товар добавлять нет смысла, а если добавляю несколько товаров, то иногда складывается нормально, а иногда — выдает NaN. Не могу уже 2 или 3 дня разобраться. 0 |
dzendev 181 / 103 / 48 Регистрация: 12.03.2016 Сообщений: 260 |
||||
25.06.2016, 22:38 |
4 |
|||
Сообщение было отмечено PavelNovichok как решение Решение
Но один товар добавлять нет смысла Что значит нет смысла? Ваш код позволяет это сделать. Значит надо переписать реализацию так чтобы нельзя было организовать подсчёт пока не будет добавлено как минимум 2 товара. Добавлено через 51 минуту
Демонстрация http://codepen.io/anon/pen/EyZLYN 1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
25.06.2016, 22:38 |
Помогаю со студенческими работами здесь Результат NaN <!DOCTYPE html> Заклятая NaN var a; Выводит NaN! parseInt($(this).text() = NaN var q… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |
При таком коде:
while(u)
{
sum += u->d.a;
++count;
}
u в цикле не меняется, поэтому мы получим бесконечный цикл, если u != 0
либо, если u == 0
совсем не зайдем в цикл, и в дальнейшем получим деление нуля на ноль, что в результате дает значение «не является числом» (Not-a-Number, NaN).
Из википедии:
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
- …
- деление нуля на ноль
Подробнее о делении нуля на нуль
u
в Вашем коде равен нулю потому, что в цикле вывода Вы его меняете:
while(u)
{
cout << u->d.a << endl;
u = u->next;
}
после этого цикла u
будет равен нулю.
Для исправления чуть переделаем код:
// Vivod (prosto idem po spisku)
List *p = u;//введем указатель, который будем использовать для прохода по списку перед выводом
while (p) {//В цикле работаем только с p, а не с u
cout << p->d.a << endl;
p = p->next;
}
// srednee arifm
if (u) {//Список не пуст
int sum = 0, count = 0;
p = u;//снова ставим p в равным u, для прохода с начала списка
while(p)//в цикле также работаем с p, а не с u
{
sum += p->d.a;
++count;
p = p->next;//не забываем перейти к следующему элементу
}
cout << "Average = " << double(sum)/count << endl;
} else {
cout << "Empty list" << endl;
}
Также Вы забыли про освобождение памяти.
Но в любом случае, Ваш список — это подход, скорее, для языка C, а не для C++.
I am using the below codes:
<script type="text/javascript">
function minus(){
var t=document.getElementById("totalcost").value;
var u=document.getElementById("advpay").value;
var set=(t-u);
document.getElementById("textfield").value=set;
return true;
}
</script>
I entered «6000» as value in totalcost id field and «1000» in advpay id field. so in textfield id field, it should show 5000 (6000-1000), but it is giving answer as NaN. where is the error ?
asked Jun 18, 2013 at 19:43
0
<script type="text/javascript">
function minus() {
var t = parseInt(document.getElementById("totalcost").value, 10),
u = parseInt(document.getElementById("advpay").value, 10),
set = (t - u);
document.getElementById("textfield").value = set;
return true;
}
</script>
This is happening because you are trying to subtract two strings! value
returns the string of the input, you need to parse it to a number in order to subtract them. Remember to specify radix of parseInt
, otherwise the number could be parsed not as a decimal. See this answer for more detailed informations.
answered Jun 18, 2013 at 19:44
5
NaN is abbreviated of Not a Number. NaN will be the result of any calculation which contains anything rather than a number (strings, boolean, object). In your case the calculations were made by using 2 strings, That’s why it has returned NaN. You have to cast your values into number before doing the calculation.
You can cast your values by using the following piece of code:
Example 1:
var t = +document.getElementById("totalcost").value;
u = +document.getElementById("advpay").value;
Example 2 (As @LightStyle suggested):
var t = parseInt(document.getElementById("totalcost").value, 10),
u = parseInt(document.getElementById("advpay").value, 10),
cssmtnr
92713 silver badges26 bronze badges
answered Jun 18, 2013 at 20:01