Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2016, 09:39   #1
mr_xxx
Пользователь
 
Регистрация: 22.03.2012
Сообщений: 99
Вопрос 02222 -02221 = 00001 как ?

Добрый день
Очень срочно нужна помощь

a:=02222
b:=02221

нужна чтобы получилась
c:=00001

как это сделать?

заранее спасибо
mr_xxx вне форума Ответить с цитированием
Старый 25.11.2016, 09:50   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

PadLeft если новая Дельфи.

Если старая, то придется сделать самому что-то такое
Код:
uses SysUtils, StrUtils;

// дополняет строку символами Symbol до длины ToLength
function ExpandStringByCharToLength(Str: string; Symbol: Char;
  ToLength: Integer; FillFromBegin: Boolean = False): string;
begin
  if Length(Str) > ToLength then
    Str := Copy(Str, 1, ToLength)
  else
    if FillFromBegin then
      Str := DupeString(Symbol, ToLength - Length(Str)) + Str
    else
      Str := Str + DupeString(Symbol, ToLength - Length(Str));
  Result := Str;
end;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.11.2016, 09:57   #3
mr_xxx
Пользователь
 
Регистрация: 22.03.2012
Сообщений: 99
По умолчанию

в примере можете покозат? я чето не разобрался (использую Delphi XE 5)
a:=02222
b:=02221

c:=ответ

Последний раз редактировалось Alex11223; 25.11.2016 в 09:59.
mr_xxx вне форума Ответить с цитированием
Старый 25.11.2016, 09:59   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

http://docwiki.embarcadero.com/Libra...Helper.PadLeft
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.11.2016, 10:15   #5
mr_xxx
Пользователь
 
Регистрация: 22.03.2012
Сообщений: 99
По умолчанию

Код:
var a,b:string;
newst1,newst2:string;
dd:integer;
begin
a:='12345';
b:='00001';

newst1:=a.PadLeft(5);
newst2:=b.PadLeft(5);


dd:= strtoint(newst1)+strtoint(newst2)  ;
showmessage(inttostr(dd));


end;
ответ : 12346
это правильно

но если задать
Код:
a:='00001';
b:='00001';
получется 2 а нужна 00002
главный вопрос не решен
mr_xxx вне форума Ответить с цитированием
Старый 25.11.2016, 10:24   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Может стоит включить мозг и применять PadLeft к результату, а не к тому что вы все равно конвертируете в число?

StrToInt, IntToStr + PadLeft
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.11.2016, 10:27   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
получется 2 а нужна 00002
Дык и используй PadLeft для получения результата
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.11.2016, 10:40   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

s:=format('%.5d', [1]); // '00001'

http://www.delphibasics.ru/Format.php
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.11.2016, 10:44   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

format неудобный, надо помнить что там и в каком виде писать и ошибки будут только в рантайме.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.11.2016, 13:03   #10
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от mr_xxx Посмотреть сообщение
получИтся 2, а нужнО 00002
главный вопрос не решен
Код:
var a,b,tmp:string;
begin
a:='00005';
b:='00001';
tmp:=IntToStr(StrToInt(a)+StrToInt(b));
while Length(tmp)<Length(a) do
tmp:='0'+tmp;
Showmessage(tmp);
end;
kropotkina-alice вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, плз, как экранировать(?) прямой слеш(/) в имени файла, чтобы java не воспринимала его как символы перед ним как другую директория? Сергей_ТВ Общие вопросы по Java, Java SE, Kotlin 3 24.10.2016 15:15
Вычислить с точностью до 0.00001 pre-dawn-haze Паскаль, Turbo Pascal, PascalABC.NET 5 29.10.2011 11:31
Как изменить в большом масиве числа с 1 на 00001 ZanderBlack1 Microsoft Office Excel 8 19.01.2011 19:55
как сам лабиринт ввести не как постоянную как тут а считыванием с файла Голем Помощь студентам 10 17.07.2010 18:07
Числа - считать от 00001 до 99999 JRcoker Общие вопросы Delphi 19 06.08.2008 22:43