Программа повторяет, что написанное мной число не является целым - PullRequest
0 голосов
/ 29 ноября 2018

Я создал программу, и она постоянно говорит мне, что введенное число не является целым числом.

Я ввожу 100010110101, и оно появляется с этой ошибкой:

image

код:

procedure TForm1.Button1Click(Sender: TObject);
var
  m,lo,cshl,cdhl,cjhl,csl,cdl,cjl:integer;
begin
  m := StrToInt(Edit1.Text);
  cshl := m div 100000000000;
  cdhl := m div 10000000000 mod 10;
  cjhl := m div 10000000000 mod 100;
  csl := m div 1000000000 mod 1000;
  cdl := m div 100000000 mod 10000;
  cjl := m div 10000000 mod 100000;
  lo := cjl + cdl * 10 + csl * 100 + cjhl * 1000 + cdhl * 10000 + cshl  *100000;
  ShowMessage(IntToStr(lo));
end;

1 Ответ

0 голосов
/ 29 ноября 2018

Рассмотрим, как Delphi (и большинство языков) обрабатывают 32-разрядные целые числа: Википедия

В этом контексте Integer - это 32-разрядное целое число, и любое значение меньше -2,147,483,648 или больше 2,147,483,647 НЕ является действительным 32-разрядным целым числом.

«Здравый смысл» будет означать, что целые числа варьируются от -∞ до +∞, но это не так вархитектура компьютера.

Используйте Int64, если хотите «охватить» больше значений.

В вашем случае код должен выглядеть следующим образом:

var
  m,lo,cshl,cdhl,cjhl,csl,cdl,cjl:Int64;
begin
  m := StrToInt64(Edit1.Text);
  ...
end;

Cheers

...