Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 358

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Помогите пожалуйста разобраться в ошибке.
ошибка EConvertError with message"5870601486"is not a valid integer value, как я поняла это значение превышает максимальное возможное целое число, как мне задать это число?

Alinka27 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Alinka27 (статус: Посетитель)
Вопрос отправлен: 1 июня 2011, 18:51
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Очевидно, что это число (587060148610 = 15DEA450E16) занимает 33 бита. Тип Integer в 32-битных платформах - это таки 32 бита или 4 байта. Так что для таких преобразований следует пользоваться переменными с типом Int64 и функциями StrToInt64() и/или TryStrToInt64().

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 1 июня 2011, 18:59


Мини-форум вопроса

Всего сообщений: 83; последнее сообщение — 2 июня 2011, 08:11; участников в обсуждении: 4.

Страницы: [1] [2] [3] [4] [5] [Следующая »]

Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 18:56 [#1]:

Приведите код где возникает ошибка будет проще.
Чисти код! Чисти код! Чисти код!
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 18:59 [#2]:

procedure TForm1.Button4Click(Sender: TObject);
var a,b: array [2..3,2..42] of double;
begin
a[3,3]:=5870601486;
StringGrid1.Cells[3,3]:=FloattoStr(a[3,3]);
end;
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:04 [#3]:

Ошибка возникает не в этой части кода. Про integer тут даже речи нет. Все переменные double.

Есть 1 вариант: само число преобразуется в integer перед записью, тогда попробуйте написать:

a[3,3]:=5870601486.0;
Чисти код! Чисти код! Чисти код!
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:05 [#4]:

Ошибка:
[Error] Unit1.pas(578): Incompatible types: 'String' and 'Int64'
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:07 [#5]:

...
Это на чей вариант решения такое выдало?
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 1 июня 2011, 19:08 [#6]:

О, блин, таких подробностей я не ожидал. Полез в исходники. Так вот, FloatToStr() вызывает функцию FloatToText(), которая написана на ассемблере и длинная, как язык моей жены. Поглядел я её по диагонали. Думаю, что целая и дробная части переводятся в строку отдельно, хотя не уверен. Видать, целая часть не влезает в какой-нить 32-битный регистр типа EAX, отсюда и исключение.
Если у тебя все числа целые, то юзай Int64 вместо Double.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:08 [#7]:

Gooddy, та же ошибка, что и в начале была.
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:10 [#8]:

когда я делаю Int64? то ошибку выдает
[Error] Unit1.pas(578): Incompatible types: 'String' and 'Int64'
min@y™

min@y™ (статус: Доктор наук), 1 июня 2011, 19:10 [#9]:

Цитата (Alinka27):

Ошибка: [Error] Unit1.pas(578): Incompatible types: 'String' and 'Int64'

Попробуй так:
procedure TForm1.Button4Click(Sender: TObject);
var a,b: array [2..3,2..42] of Int64;
begin
  a[3,3]:= 5870601486;
  StringGrid1.Cells[3,3]:= IntToStr(a[3,3]);
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:11 [#10]:

procedure TForm1.Button1Click(Sender: TObject);
var
d:double;
begin
d:=5870601486;
form1.Caption:=floattostr(d);
end;

Delphi 7.
Работает
Lazarus
Работает
Delphi XE
Работает

Ошибка в другом месте.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:14 [#11]:

Ошибка скорее всего там, где вы вызываете метод StrToInt, чтобы обратно получить своё число вместо strToFloat
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 1 июня 2011, 19:15 [#12]:

Цитата (Gooddy):

Ошибка в другом месте.

Вот и я думаю... Такое исключение обычно выдают функции преобразования из строки в Integer. Это "жжжж" неспроста...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:16 [#13]:

min@y™: снова ошибка EConvertError with message"5870601486"is not a valid integer value
min@y™

min@y™ (статус: Доктор наук), 1 июня 2011, 19:26 [#14]:

Цитата (Alinka27):

снова ошибка EConvertError with message"5870601486"is not a valid integer value

А в каком месте (на какой строке кода) она возникает?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:28 [#15]:

radmin штоле ставить даже непонимаю...
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:28 [#16]:

Код такой секретный? Почему вы нам его не показываете?
Чисти код! Чисти код! Чисти код!
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:28 [#17]:

min@y™: Там не написано, после нажатия на кнопку появляется ошибка.
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:30 [#18]:

он элементарный!=)
procedure TForm1.Button4Click(Sender: TObject);
var a,b: array [2..3,2..42] of int64;
begin
a[2,3]:=2109838271;
a[2,4]:=3054711;
a[2,5]:=344456667;
a[2,7]:=1157442479;
a[2,8]:=5597696;
a[2,9]:=57483356;
a[2,10]:=137472198;
a[2,11]:=308622287;
a[2,12]:=603105;
a[2,13]:=31727156;
a[2,14]:=1662869911;
a[2,15]:=1765876698;
a[2,19]:=267579;
a[2,20]:=26706340;
a[2,21]:=42533338;
a[2,22]:=5229802;
a[2,23]:=29575217;
a[2,24]:=4527308;
a[2,25]:=5682857;
a[2,27]:=268239509;
a[2,28]:=14312856;
a[2,29]:=30996314;
a[2,30]:=94294071;
a[2,31]:=353802683;
a[2,32]:=76188111;
a[2,36]:=566638473;
a[2,38]:=231007536;
a[2,39]:=15000000;
a[3,3]:=5870601486;
a[3,4]:=12239758;
a[3,5]:=4878033538;
a[3,7]:=1412365088;
a[3,8]:=6873499;
a[3,9]:=59153858;
a[3,10]:=229375538;
a[3,11]:=505581517;
a[3,12]:=806314;
a[3,13]:=41315965;
a[3,14]:=2789428119;
a[3,15]:=2626788478;
a[3,19]:=282242;
a[3,20]:=44240410;
a[3,21]:=51094803;
a[3,22]:=2884960;
a[3,23]:=97679311;
a[3,24]:=3712929;
a[3,25]:=5963477;
a[3,27]:=201686601;
a[3,28]:=7289612;
a[3,29]:=110373702;
a[3,30]:=50998993;
a[3,31]:=518824956;
a[3,32]:=70494251;
a[3,36]:=166135045;
a[3,38]:=236083522;
a[3,39]:=650000;
StringGrid1.Cells[2,3]:=floatTostr(a[2,3]);
StringGrid1.Cells[2,4]:=floatTostr(a[2,4]);
StringGrid1.Cells[2,5]:=floatTostr(a[2,5]);
StringGrid1.Cells[2,7]:=floatTostr(a[2,7]);
StringGrid1.Cells[2,8]:=FloatToStr(a[2,8]);
StringGrid1.Cells[2,9]:=FloatToStr(a[2,9]);
StringGrid1.Cells[2,10]:=FloatToStr(a[2,10]);
StringGrid1.Cells[2,11]:=FloatToStr(a[2,11]);
StringGrid1.Cells[2,12]:=FloatToStr(a[2,12]);
StringGrid1.Cells[2,13]:=FloatToStr(a[2,13]);
StringGrid1.Cells[2,14]:=FloatToStr(a[2,14]);
StringGrid1.Cells[2,15]:=FloatToStr(a[2,15]);
StringGrid1.Cells[2,19]:=FloatToStr(a[2,19]);
StringGrid1.Cells[2,20]:=FloatToStr(a[2,20]);
StringGrid1.Cells[2,21]:=FloatToStr(a[2,21]);
StringGrid1.Cells[2,22]:=FloatToStr(a[2,22]);
StringGrid1.Cells[2,23]:=FloatToStr(a[2,23]);
StringGrid1.Cells[2,24]:=FloatToStr(a[2,24]);
StringGrid1.Cells[2,25]:=FloatToStr(a[2,25]);
StringGrid1.Cells[2,27]:=FloatToStr(a[2,27]);
StringGrid1.Cells[2,28]:=FloatToStr(a[2,28]);
StringGrid1.Cells[2,29]:=FloatToStr(a[2,29]);
StringGrid1.Cells[2,30]:=FloatToStr(a[2,30]);
StringGrid1.Cells[2,31]:=FloatToStr(a[2,31]);
StringGrid1.Cells[2,32]:=FloatToStr(a[2,32]);
StringGrid1.Cells[2,36]:=FloatToStr(a[2,36]);
StringGrid1.Cells[2,38]:=FloatToStr(a[2,38]);
StringGrid1.Cells[2,39]:=FloatToStr(a[2,39]);
 
StringGrid1.Cells[3,3]:=IntToStr(a[3,3]);
StringGrid1.Cells[3,4]:=FloatToStr(a[3,4]);
StringGrid1.Cells[3,5]:=FloatToStr(a[3,5]);
StringGrid1.Cells[3,7]:=FloatToStr(a[3,7]);
StringGrid1.Cells[3,8]:=FloatToStr(a[3,8]);
StringGrid1.Cells[3,9]:=FloatToStr(a[3,9]);
StringGrid1.Cells[3,10]:=FloatToStr(a[3,10]);
StringGrid1.Cells[3,11]:=FloatToStr(a[3,11]);
StringGrid1.Cells[3,12]:=FloatToStr(a[3,12]);
StringGrid1.Cells[3,13]:=FloatToStr(a[3,13]);
StringGrid1.Cells[3,14]:=FloatToStr(a[3,14]);
StringGrid1.Cells[3,15]:=FloatToStr(a[3,15]);
StringGrid1.Cells[3,19]:=FloatToStr(a[3,19]);
StringGrid1.Cells[3,20]:=FloatToStr(a[3,20]);
StringGrid1.Cells[3,21]:=FloatToStr(a[3,21]);
StringGrid1.Cells[3,22]:=FloatToStr(a[3,22]);
StringGrid1.Cells[3,23]:=FloatToStr(a[3,23]);
StringGrid1.Cells[3,24]:=FloatToStr(a[3,24]);
StringGrid1.Cells[3,25]:=FloatToStr(a[3,25]);
StringGrid1.Cells[3,27]:=FloatToStr(a[3,27]);
StringGrid1.Cells[3,28]:=FloatToStr(a[3,28]);
StringGrid1.Cells[3,29]:=FloatToStr(a[3,29]);
StringGrid1.Cells[3,30]:=FloatToStr(a[3,30]);
StringGrid1.Cells[3,31]:=FloatToStr(a[3,31]);
StringGrid1.Cells[3,32]:=FloatToStr(a[3,32]);
StringGrid1.Cells[3,36]:=FloatToStr(a[3,36]);
StringGrid1.Cells[3,38]:=FloatToStr(a[3,38]);
StringGrid1.Cells[3,39]:=FloatToStr(a[3,39]);
end;
 
end.
Gooddy

Gooddy (статус: 3-ий класс), 1 июня 2011, 19:30 [#19]:

d:=587060148632433432422143131.0;
form1.Caption:=floattostr(d);
d:=strtofloat(form1.Caption);

!!!!!!!!!!!!!!!!

Нам нужен весь код!
Чисти код! Чисти код! Чисти код!
Alinka27

Alinka27 (статус: Посетитель), 1 июня 2011, 19:31 [#20]:

Кстати, это у меня кнопка тест, но расчеты выполняется после нажатия на другую кнопку.

Страницы: [1] [2] [3] [4] [5] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.04 сек.