Ошибка в с значение не может быть бесконечным

I think this will be an easy one, i think im missing something.

if (((int)row.Cells["Pareto"].Value <= 50) && (row.Cells["Pareto"].Value != null))

this code gives me the error that when casting cant be a number that is infinite.

Ive also tried:

if (((int)row.Cells["Pareto"].Value <= 50) && ((string)row.Cells["Pareto"].Value != null))
if (((int)row.Cells["Pareto"].Value <= 50) && (row.Cells["Pareto"].Value != ""))

any help would be great!

Im using winforms in visual studio 10 using C#.

error: «When casting from a number, the value must be less than infinite»

More of the Code if your interested:

foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            //countpg
            //countPg++;
            pgtothold = Convert.ToSingle(row.Cells["Qty"].Value);
            countPg += pgtothold;

            //if (((int)row.Cells["Pareto"].Value <= 50) && (row.Cells["Pareto"].Value != null))
            if ((Convert.ToDouble(row.Cells["Pareto"].Value)) && ((int)row.Cells["Pareto"].Value <= 50)
            {
                //top 50
                //top++;
                tempTop = Convert.ToSingle(row.Cells["Qty"].Value);
                top += tempTop;
            }
            else
                if (((int)row.Cells["Pareto"].Value > 50) && ((int)row.Cells["Pareto"].Value <= 100) && (row.Cells["Pareto"].Value != ""))
                {
                    //50-100
                    tempMidt = Convert.ToSingle(row.Cells["Qty"].Value);
                    tmid += tempMidt;
                }
                else

Изучение программирования и логики программ может оказаться не простой задачей, спросите любого, кто прошел этот этап, того, кто сделал это. К несчастью, одни и те же проблемы возникают снова и снова, особенно у новичков. В этой статье я постарался собрать одни из наиболее распространенных проблем, с которыми вы непременно столкнетесь, если станете программистом.

1) Использование необъявленных переменных

int main()
{
  cin >>  y;
  cout << y;
}

Допустим, вы написали этот код, компилируете программу и тут компилятор сообщает об ошибках. и тут у вас возникает вопрос: «Почему я получаю сообщение об ошибке?». Ответ предельно прост: «Ваш компилятор не знает, что означает y. И перед тем как использовать y, вы должны объявить его как переменную.» Ниже показан код, в котором исправлена данная ошибка.

int main()
{
  int y;
  cin >>  y;
  cout << y;
}

2) Использование неинициализированных переменных

int ct;
while(ct < 100)
{
  cout << ct;
}

Что можно ожидать от этого кода? Да все, что угодно. Мы объявили переменную ct, но не инициализировали начальным значением, значит там содержится какое-то значение — мусор. Оно может быть огромным или очень маленьким. Поэтому могут быть два случая:

  1. если значение ct меньше 100, то программа попадет в цикл;
  2. чаще всего ct огромное число, поэтому скорее всего программа не попадет в цикл.

И самое главное, вы не будете понимать почему это происходит. В C++ переменные неявно не инициализируются нулем, при объявлении. В приведенном выше фрагменте кода, количество может быть любое значение в диапазоне от типа данных int. Это может, например, быть 7631, в  таком случае, условие цикла никогда не будет истинным. Возможно, программа будет печатать цифры от -120 до 99, и это тоже признак ошибки. Поэтому, никогда не забывайте о начальной инициализации переменных.

3. Инициализация переменной мусорным значением

int num1, num2;
int sum = num1 + num2;
cout << "Введите два числа для суммирования: ";
cin >> num1;
cin >> num2;
cout << "Сумма = " << sum;

Когда запустите программу, вас может удивить результат, например, такой:

CppStudio.com

Введите два числа для суммирования: 5 5
Сумма = 32767

Хотите узнать почему сумма равна 32767 ?

Часто начинающие программисты считают, что переменные и выражения работ — это как уравнения — если присвоить переменной результат операции с несколькими другими переменными  (num1, num2, в данном примере), которые изменятся позже, предполагают, что  значение переменной тоже изменится. C++ не работает таким образом! В примере программы, num1 и num2 не инициализируются перед выполнением операции сложения, поэтому сумма будет равна случайному значению.

Чтобы исправить эту ошибку, переместите операцию суммирования после ввода num1 и num2.

int num1, num2;
cout << "Введите два числа для суммирования: ";
cin >> num1;
cin >> num2;
int sum = num1 + num2;
cout << "Сумма = " << sum;

А вот и результат, если не верите, проверьте сами.

CppStudio.com

Введите два числа для суммирования: 5 5
Сумма = 10

4. Использование одного знака равенства для проверки равенства

char ch = 'Y';
while(ch = 'Y')
{
  //какой-то код
  cout << "Продолжить? (Y/N)";
  cin >> ch;
}

«Почему никогда не заканчивается цикл?»

Если вы используете один знак равенства для проверки равенства, ваша программа будет вместо  сравнения, присваивать значение в правой части выражения, переменной в левой части. В этом случае, значение 'Y', которое рассматривается как истинное всегда будет присваиваться переменной ch. Таким образом, цикл никогда не закончится. Используйте == для проверки равенства, кроме того, чтобы избежать случайного присвоения, поменяйте местами переменную ch и значение 'Y'. Так, вы получите ошибку компиляции, если случайно использовали один знак равенства, поскольку вы не можете присвоить значение тому, что не является переменной.

char ch = 'Y';
while('Y' == ch)
{
  //какой-то код
  cout << "Продолжить? (Y/N)";
  cin >> ch;
}

4. Необъявленная функция

int main()
{
  print();
}
void print()
{
  //что-то печатаем
}

«Почему я получаю ошибку о том, что программе неизвестна функция print

Компилятор не знает, что такое print(), так как определение функции print выполнено после main и не объявлен прототип. Всегда помните, нужно указать либо прототип функции, либо все определение функции выше строки, в которой будет вызов этой функции.

void print();
int main()
{
  print();
}
void print()
{
  //что-то печатаем
}

 6) Лишние точка с запятой

int ix;
for(ix = 0; ix < 100; ix++);
  cout << ix;

«Почему вывод равен 3476?»

Все дело в том, что вы поставили дополнительные точку с запятой. Помните, что точка с запятой не ставится, после определения, циклов, или функций. Если вы случайно поставите точку с запятой в любом из этих мест, ваша программа будет работать некорректно.

int ix;
for(ix = 0; ix < 100; ix++)
  cout << ix;

7) Нарушение границ массива

int array[10];
//код...
for(int ix = 1; ix <= 10; ix++)
  cout << array[ix];

«Почему вывод программы содержит неправильные значения?»

Элементы массива индексируются, начиная с 0, а значит, общая длинна на 1 меньше. Например, если у вас есть десять элементов массива, первый элемент находится в положении нуля, а последний элемент в позиции 9.

int array[10];
//код...
for(int ix = 0; ix < 10; ix++)
  cout << array[ix];

В этом коде границы массива уже не нарушаются.

Я думаю, что это будет легко, я думаю, что я что-то упустил.

if (((int)row.Cells["Pareto"].Value <= 50) && (row.Cells["Pareto"].Value != null))

этот код дает мне ошибку, что при приведении не может быть бесконечным числом.

Я также попробовал:

if (((int)row.Cells["Pareto"].Value <= 50) && ((string)row.Cells["Pareto"].Value != null))
if (((int)row.Cells["Pareto"].Value <= 50) && (row.Cells["Pareto"].Value != ""))

любая помощь будет отличной!

Я использую winforms в Visual Studio 10 с использованием C#.

ошибка: «При приведении числа число должно быть меньше бесконечного»

Больше кодекса, если вы заинтересованы:

foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            //countpg
            //countPg++;
            pgtothold = Convert.ToSingle(row.Cells["Qty"].Value);
            countPg += pgtothold;

            //if (((int)row.Cells["Pareto"].Value <= 50) && (row.Cells["Pareto"].Value != null))
            if ((Convert.ToDouble(row.Cells["Pareto"].Value)) && ((int)row.Cells["Pareto"].Value <= 50)
            {
                //top 50
                //top++;
                tempTop = Convert.ToSingle(row.Cells["Qty"].Value);
                top += tempTop;
            }
            else
                if (((int)row.Cells["Pareto"].Value > 50) && ((int)row.Cells["Pareto"].Value <= 100) && (row.Cells["Pareto"].Value != ""))
                {
                    //50-100
                    tempMidt = Convert.ToSingle(row.Cells["Qty"].Value);
                    tmid += tempMidt;
                }
                else

2012-01-26 16:10

3
ответа

Решение

Я предлагаю вам использовать:

var data =  System.Convert.ToInt32(row.Cells["Pareto"].Value);
   if( data <=50 )
   {
    ----
   }

значение не будет равно 0, если содержимое DBNull (если это приемлемо), поэтому ваш код будет выглядеть чище и безопаснее.

2012-01-26 16:14

if ((row.Cells["Pareto"].Value != null) && ((int)row.Cells["Pareto"].Value <= 50))

Я думаю, ты хочешь этого. Если вещь нулевая, она не оценивает остальную часть AND.

2012-01-26 16:12

Результат от datatable, скорее всего, имеет тип decimal. Так что попробуйте это:

if (((decimal)row.Cells["Pareto"].Value <= 50.0m) && (row.Cells["Pareto"].Value != null))

2013-04-03 19:52

В моих программах бесконечность обычно возникает, когда значение делится на ноль. Я становлюсь неопределенным, когда я делю нуль на ноль. Как вы проверяете бесконечные и неопределенные значения в С++?

В С++ бесконечность представлена ​​как 1. # INF. Неопределенный — -1. # IND. Проблема заключается в том, как проверить, является ли переменная бесконечной или неопределенной. Проверка бесконечности относительно проста: вы найдете определение бесконечности в вашем конкретном С++. Для моего случая (VS2003) это std:: numeric_limits:: infinity(). Вы должны включить «ограничения», чтобы использовать его. Вы можете назначить это бесконечное значение переменной, и вы можете сравнить ее с некоторым значением, чтобы проверить, является ли это значение бесконечным.

Неопределенный немного сложнее, потому что вы не можете сравнивать неопределенное значение с каким-либо другим значением. Любое сравнение возвращает false. Вы можете использовать это свойство для определения неопределенного значения, сравнивая его с самим собой. Скажем, у вас есть двойная переменная, называемая aVal. В нормальных условиях aVal!= AVal возвращает false. Но если значение неопределенно, aIndVal!= AIndVal возвращает true. Эта странная ситуация отсутствует для бесконечных значений, т.е. AInfVal!= AInfVal всегда возвращает false.

Вот две функции, которые можно использовать для проверки неопределенных и бесконечных значений:

#include "limits.h"
#include "math.h"

bool isIndeterminate(const double pV)
{
    return (pV != pV);
} 

bool isInfinite(const double pV)
{
    return (fabs(pV) == std::numeric_limits::infinity())
}

Есть ли лучшие способы для этих проверок, я что-то пропустил?

Студворк — интернет-сервис помощи студентам

C#
1
2
3
4
5
 private void timer1_Tick(object sender, EventArgs e)
if (Clipboard.ContainsText()) {
                Clipboard.SetText(Regex.Replace(Clipboard.GetText(), @"[0-9 +]{11,12}", "телефон"));
 
            }

System.ArgumentNullException: «Значение не может быть неопределенным.
Имя параметра: text»

Помогите пожалуйста. Какое то время работает, потом начинаешь копировать текст(смотря сколько) вылетает через какое то время ошибка. Программа по таймеру ищет номер телефона в буфере, вроде все впорядке, проверку на текст сделал, интервал 500 ms. Может быть лучше сделать бесконечный цикл? While (true)? Просто я где — то слышал, что пока код в таймере не выполнится, он новый не начнет, а с циклом такое может быть. Буду очень признателен

Понравилась статья? Поделить с друзьями:
  • Ошибка в ручном тексте 6 букв сканворд
  • Ошибка в русском языке с повторением слов
  • Ошибка в русском языке повторение слов
  • Ошибка в русском языке повтор слова
  • Ошибка в русском языке неправильное построение предложения