Ar0x 0 / 0 / 1 Регистрация: 22.10.2014 Сообщений: 6 |
||||
1 |
||||
19.12.2014, 00:13. Показов 4474. Ответов 2 Метки нет (Все метки)
Всем добрый день! есть такое задание Формулы: a=(cos(1+x+x^2/2)/sin(y-x^2+z))^|x| Сам код:
И собственно вопрос — почему при некоторых значениях со знаком «-» или 0 выдает значение NaN. Хотя я же написал с поправками на значение 0 в знаменателе. Спасибо.
__________________ 0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
19.12.2014, 00:13 |
2 |
bormant Модератор 7481 / 4353 / 2771 Регистрация: 22.11.2013 Сообщений: 12,480 Записей в блоге: 1 |
||||||||||||
19.12.2014, 00:33 |
2 |
|||||||||||
NaN — это «not a number», получается при 0/0. Кстати, приведите примеры значений, когда NaN получается. PS. Кстати, чтобы вставить в строку апостроф, достаточно его задвоить:
Добавлено через 7 минут
Код NAN 1 |
Супер-модератор 6108 / 2847 / 1299 Регистрация: 04.03.2013 Сообщений: 5,738 Записей в блоге: 1 |
|
20.12.2014, 13:58 |
3 |
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
Свойства NaN:
3 |
От автора: В данной статье мы познакомимся со специальным свойством 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 на практическом примере по созданию веб-приложения
Смотреть
Что такое 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
. Код на Java.
Как исправить ошибку и сделать две такие же программы на C и C++ ?
package Formula;
import static java.lang.Math.pow;
import java.util.Scanner;
public class My_Program {
public static void main(String[] args) {
double m, a, res, s1, e, l1, s2, mod1, mod2, l2;
System.out.println("Введите целое число х:");
Scanner in= new Scanner (System.in);
int x = in.nextInt();
System.out.println("Введите целое число d:");
int d = in.nextInt();
System.out.println("Введите дробное число a. Целую и дробную часть разделите запятой:");
a = in.nextDouble();
System.out.println("Введите дробное число u. Целую и дробную часть разделите запятой:");
m = in.nextDouble();
s1= Math.pow(Math.sin( pow(d,3)),2);
e=Math.exp(Math.abs(a-Math.tan(x)));
mod1=Math.abs((1-s1)/(1.5+e));
l1=pow(Math.log(pow(a,2)),3);
s2=pow(Math.sin(d),2);
mod2=Math.abs((m-l1)/(1+s2));
l2=pow(Math.log(mod2)/Math.log(3),2);
res=Math.acos (pow( mod1,0.3333)+Math.sqrt(2.7+l2));
System.out.print("Входные данные rn");
System.out.print("============== rn");
System.out.printf("a =%.1f",a);
System.out.print( "rn");
System.out.printf("d = %d ",d);
System.out.print( "rn");
System.out.printf("x = %d",x);
System.out.print( "rn");
System.out.printf("U=%f",m);
System.out.print("rn");
System.out.print("Результат:rn");
System.out.print("==============");
System.out.print( "rn");
System.out.printf("B= %f",res);
}
}
I am working on a function for the quadratic formula in java eclipse mars, and when I compile the code it outputs NaN when mathematically this answer is possible and i should get 2.0 please help
import java.util.Scanner;
public class Quadradic1 {
public static void main(String[] args) {
double a;
double b;
double c;
double x;
System.out.print("Input A B C: ");
Scanner input = new Scanner(System.in);
a = input.nextDouble();
b = input.nextDouble();
c = input.nextDouble();
x = (-b + Math.sqrt(b * b + 4 * a * c))/(2 * a);
System.out.println("Quadratic1 " + x);
}
}
Sorry the values I entered are a=1 b=2 and c=-8
asked Sep 17, 2015 at 2:55
2
For your inputs
b * b + 4 * a * c
evaluates to -28
. There is not such thing as the square root of a negative number
answered Sep 17, 2015 at 3:03
logeelogee
4,9971 gold badge26 silver badges34 bronze badges
1
I am working on a function for the quadratic formula in java eclipse mars, and when I compile the code it outputs NaN when mathematically this answer is possible and i should get 2.0 please help
import java.util.Scanner;
public class Quadradic1 {
public static void main(String[] args) {
double a;
double b;
double c;
double x;
System.out.print("Input A B C: ");
Scanner input = new Scanner(System.in);
a = input.nextDouble();
b = input.nextDouble();
c = input.nextDouble();
x = (-b + Math.sqrt(b * b + 4 * a * c))/(2 * a);
System.out.println("Quadratic1 " + x);
}
}
Sorry the values I entered are a=1 b=2 and c=-8
asked Sep 17, 2015 at 2:55
2
For your inputs
b * b + 4 * a * c
evaluates to -28
. There is not such thing as the square root of a negative number
answered Sep 17, 2015 at 3:03
logeelogee
4,9971 gold badge26 silver badges34 bronze badges
1
В 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 — это специфическое значение, которое получается самостоятельно, но может быть полезной.
17 авг. 2022 г.
читать 2 мин
Одна ошибка, с которой вы можете столкнуться при использовании pandas:
ValueError : cannot convert float NaN to integer
Эта ошибка возникает, когда вы пытаетесь преобразовать столбец в кадре данных pandas из числа с плавающей запятой в целое число, но столбец содержит значения NaN.
В следующем примере показано, как исправить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, мы создаем следующие Pandas DataFrame:
import pandas as pd
import numpy as np
#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, np.nan , 10, 6, 5, np.nan , 9, 12]})
#view DataFrame
df
points assists rebounds
0 25 5 11
1 12 7 NaN
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 NaN
6 25 9 9
7 29 4 12
В настоящее время столбец «отскоки» имеет тип данных «плавающий».
#print data type of 'rebounds' column
df['rebounds']. dtype
dtype('float64')
Предположим, мы пытаемся преобразовать столбец «отскоки» из числа с плавающей запятой в целое число:
#attempt to convert 'rebounds' column from float to integer
df['rebounds'] = df['rebounds'].astype (int)
ValueError : cannot convert float NaN to integer
Мы получаем ValueError , потому что значения NaN в столбце «отскоков» не могут быть преобразованы в целые значения.
Как исправить ошибку
Способ исправить эту ошибку состоит в том, чтобы иметь дело со значениями NaN, прежде чем пытаться преобразовать столбец из числа с плавающей запятой в целое число.
Мы можем использовать следующий код, чтобы сначала определить строки, содержащие значения NaN:
#print rows in DataFrame that contain NaN in 'rebounds' column
print(df[df['rebounds']. isnull ()])
points assists rebounds
1 12 7 NaN
5 23 9 NaN
Затем мы можем либо удалить строки со значениями NaN, либо заменить значения NaN каким-либо другим значением перед преобразованием столбца из числа с плавающей запятой в целое число:
Метод 1: удаление строк со значениями NaN
#drop all rows with NaN values
df = df.dropna ()
#convert 'rebounds' column from float to integer
df['rebounds'] = df['rebounds'].astype (int)
#view updated DataFrame
df
points assists rebounds
0 25 5 11
2 15 7 10
3 14 9 6
4 19 12 5
6 25 9 9
7 29 4 12
#view class of 'rebounds' column
df['rebounds']. dtype
dtype('int64')
Способ 2: заменить значения NaN
#replace all NaN values with zeros
df['rebounds'] = df['rebounds']. fillna ( 0 )
#convert 'rebounds' column from float to integer
df['rebounds'] = df['rebounds'].astype (int)
#view updated DataFrame
df
points assists rebounds
0 25 5 11
1 12 7 0
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 0
6 25 9 9
7 29 4 12
#view class of 'rebounds' column
df['rebounds']. dtype
dtype('int64')
Обратите внимание, что оба метода позволяют избежать ошибки ValueError и успешно преобразовать столбец с плавающей запятой в столбец с целым числом.
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:
Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс
Джулич 0 / 0 / 0 Регистрация: 04.12.2011 Сообщений: 10 |
||||
1 |
||||
06.12.2011, 17:56. Показов 14593. Ответов 2 Метки нет (Все метки)
Подскажите что не так в этой программе? Миниатюры
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
06.12.2011, 17:56 |
Ответы с готовыми решениями: Неверная операция при вычислении выражения Ошибочный ответ программы при вычислении выражения Ошибка «Ожидался оператор» при вычислении выражения Ошибка в вычислении выражения 2 |
4 / 3 / 4 Регистрация: 06.12.2011 Сообщений: 63 |
|
06.12.2011, 22:08 |
2 |
NaN — значение не определено.
0 |
Puporev Почетный модератор 64291 / 47589 / 32740 Регистрация: 18.05.2008 Сообщений: 115,181 |
||||
07.12.2011, 16:01 |
3 |
|||
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
07.12.2011, 16:01 |
Помогаю со студенческими работами здесь Исправить ошибку в вычислении выражения Найти ошибку в вычислении выражения Ошибка при вычислении выражения При вычислении выдает nan Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 3 |
При решении одной формулы с использованием чисел с запятой, я получаю в ответе NaN
Но при решении той же формулы с целыми числами, ответ получается адекватный
Тут все адекватно
for (double x = 1; x <= 10; x ++)
{
double value = 2 * ((x - 1) / (x + 1)) +
(Math.Pow((x - 1), x) / (3 * Math.Pow((x + 1), 3)));
Console.WriteLine("Для x = " + Math.Round(x, 2) + " Ответ: " + Math.Round(value, 2) + "\n");
}
Проблема в этом коде:
for (double x = 0.1; x <= 1; x += 0.1)
{
double value = 2 * ((x - 1) / (x + 1)) +
(Math.Pow((x - 1), x) / (3 * Math.Pow((x + 1), 3)));
Console.WriteLine("Для x = " + Math.Round(x, 2) + " Ответ: " + Math.Round(value, 2) + "\n");
}
Grundy♦
80.4k9 золотых знаков78 серебряных знаков133 бронзовых знака
задан 6 мая 2020 в 12:08
1
В случае с дробным x
, в результате (x - 1)
в основании степени оказывается отрицательное число. При этом показатель степени является дробным.
Для этого случая есть описание в справке
x < 0 but not NegativeInfinity; y is not an integer, NegativeInfinity, or PositiveInfinity. result = NaN
ответ дан 6 мая 2020 в 12:25
Grundy♦Grundy
80.4k9 золотых знаков78 серебряных знаков133 бронзовых знака
2
NaN (Not a Number) — это ошибка, которая возникает в языке программирования Паскаль, когда математический результат не может быть определен или представлен в виде числа. Эта ошибка может возникать, например, при расчете выражений с использованием функций, таких как sqrt или ln.
Существует несколько способов исправления ошибки NaN в Паскале:
1. Применение условий
Использование условных операторов позволяет проверить, является ли результат операции NaN, и если да, то заменить его на другое значение или выдать сообщение об ошибке. Например:
var
x, y, z: real;
begin
x := 10;
y := 0;
z := x / y;
if IsNan(z) then
writeln('Error: division by zero')
else
writeln(z);
end.
2. Использование функций
В Паскале есть несколько функций, которые могут помочь обнаружить и исправить ошибки NaN. Например, функция IsNan проверяет, является ли число NaN, а функция Infinity позволяет получить бесконечность. Пример использования функции IsNan:
var
x, y, z: real;
begin
x := 10;
y := 0;
z := x / y;
if IsNan(z) then
z := 0;
writeln(z);
end.
3. Использование типа данных extended
Когда работа с вещественными числами требует большей точности, поэтому можно использовать тип данных extended вместо real. Это тип данных, который представляет числа с большей точностью и диапазоном значений, чем real.
var
x, y, z: extended;
begin
x := 10;
y := 0;
z := x / y;
writeln(z);
end.
4. Обработка исключений
В Паскале есть возможность обработки исключений при появлении ошибки NaN. Это позволит разработчику узнать о возникшей ошибке и выполнить действия по ее исправлению. Пример:
var
x, y, z: real;
begin
x := 10;
y := 0;
try
z := x / y;
except
on E: EDivByZero do
writeln('Error: division by zero');
on E: EInvalidOp do
writeln('Error: NaN value');
end;
end.
Выводы
Исправление ошибки NaN в Паскале возможно при помощи различных методов. Разработчик может выбрать подход, который подходит для конкретной задачи, и следует применять его для создания надежного кода.
Here are the things I am trying to do
- Read Excel file with formulas into pandas dataframe
- Change values in some cell
- Evaluate the cell values according to the formulas
- Finally, save that file as html
Here’s my code
import pandas as pd
import numpy as np
from openpyxl import load_workbook
wb = load_workbook(filename = 'initial.xlsx')
sheet_names = wb.get_sheet_names()
name = sheet_names[0]
sheet_ranges = wb[name]
df = pd.DataFrame(sheet_ranges.values)
df['x']['C'] = 10
df.to_excel("processing.xlsx", header=False, index=False)
df1 = pd.read_excel("processing.xlsx", sheetname=0, header=0)
df1.to_html('output.html')
With this code I am able to get fully functioning processing.xlsx but if I try to convert it into html the dataframe reads all formulas as NaN.
Question: How to force pandas to evaluate formulas of xlsx and not read them as NaN?
PS: If I try to convert initial.xlsx into html it works fine so something must be wrong in to_excel output.
asked Dec 31, 2017 at 9:20
GauravGaurav
2,0031 gold badge25 silver badges50 bronze badges
I found the problem and a messy workaround.
Problem:openpyxl does not keep the types intact while saving. The size of processing.xlsx got reduced by 10kb. Therefore, pandas read it as NaN. Therefore, I had to use xlwings which deciphers the types of cell correctly.
PS: It is not the best solution, therefore, other Answers are welcome
import pandas as pd, xlwings as xw
def df_from_excel(path):
app = xw.App(visible=False)
book = app.books.open(path)
book.save()
app.kill()
return pd.read_excel(path,header=0)
df1 = df_from_excel("1.xlsx")
print(df1.head())
df1.to_html('public\output.html')
P i
29.1k36 gold badges160 silver badges268 bronze badges
answered Dec 31, 2017 at 21:15
GauravGaurav
2,0031 gold badge25 silver badges50 bronze badges