Member 13650651 Ответов: 1

Значение либо слишком велико, либо слишком мало для двойника


string strLot = "Lot = '" + textBox1.Text + "'";
                    
                    string strsearchLot = textBox1.Text;
                    dtsearchLot = null;
                    rows = dt.Select(strsearchLot);

                    if (rows != null && rows.Length > 0)
                    {
                        dtsearchLot = rows.CopyToDataTable();
                    }

                    cnt++;


Привет! Я написал этот код для поиска определенного "номера лота" из моего листа excel. Однако я получил ошибку "стоимость либо слишком велика, либо слишком мала для двойника" около
rows = dt.Select(strsearchLot); 


Номер строки для "strsearchLot" из листа excel указывается как строка 668.
Могу ли я узнать, как решить эту проблему? Заранее благодарю вас за помощь.

Что я уже пробовал:

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

Jochen Arndt

Вы уверены, что ошибка возникает в этой строке, а не в следующей, содержащей строки?CopyToDataTable()?

Member 13650651

мой плохой, ошибка на самом деле находится в "rows = dt.Select(strsearchLot);"

Maciej Los

Каковы ваши входные данные в datatable?

Jochen Arndt

Откройте лист с помощью Excel и проверьте столбцы в этой строке. Вероятно, существует ячейка, содержащая значение, которое не может быть представлено в виде двойника вейлда.

F-ES Sitecore

Учитывая, что мы не знаем, что такое тип "строки" или что он содержит, мы не знаем, что такое "dt", мы не знаем, что такое "Select", или что он делает, или какие параметры он использует, и у нас нет доступа к вашим данным, на этот вопрос никто не может ответить, мы можем только догадываться. Как следует из сообщения об ошибке, вероятно, в вашем листе есть число, которое слишком велико или слишком мало для хранения в двойной переменной .net.

1 Ответов

Рейтинг:
1

Maciej Los

Сообщение об ошибке не требует пояснений.

В качестве официальная документация[^] государственный:

Цитата:
Реальные литералы, использующие научную нотацию, такие как 4.42372E-30, анализируются с помощью System.Double.

Реальные литералы без научной нотации, но с десятичной точкой, рассматриваются как System.Decimal. Если это число превышает максимальные или минимальные значения, поддерживаемые System.Decimal, то он анализируется как System.Double. Например:

142526.144524 будет преобразован в Decimal.

345262.78036719560925667 будет рассматриваться как Double.


Кстати: Ваш код, вероятно, ошибочен!
string strLot = "Lot = '" + textBox1.Text + "'"; //this seems to be OK!
string strsearchLot = textBox1.Text;//this is probably wrong, unless a TextBox1.Text contains: Lot=<SomeDecimalValue>!
rows = dt.Select(strsearchLot); //if textBox1.Text does not contains field name and proper comparison operator, it'll cause error "The expression '<ValueFromTextBox>' does not return a boolean.":