ورود

View Full Version : سوال: حذف کردن صفر های اول در edit



arkia
سه شنبه 02 شهریور 1389, 15:20 عصر
من یه edit دارم که معمولا چند رقم اول آن صفر داره حالا برای محاسبات میخوام صفر های اولش رو بردارم به نظرتون با چه کدی صفر های اولش رو بردارم؟ :متفکر:

Delphi7_love
سه شنبه 02 شهریور 1389, 15:55 عصر
اگر تبدیل به عددش کنید صفر های اون برداشته میشه


edit1.Text:=inttostr(strtoint(edit1.Text))

hossein_h62
سه شنبه 02 شهریور 1389, 17:29 عصر
اگر تبدیل به عددش کنید صفر های اون برداشته میشه


edit1.Text:=inttostr(strtoint(edit1.Text))

البته بشرطی که عددتون از 2147483647 بیشتر نباشه!

Delphi7_love
سه شنبه 02 شهریور 1389, 17:40 عصر
البته بشرطی که عددتون از 2147483647 بیشتر نباشه!

من مثال رو با int زدم دیگه تغییرات راحته
واسه همین ناراحتی ؟ :گیج:

edit1.Text:=floattostr(strtofloat(edit1.text))

hossein_h62
سه شنبه 02 شهریور 1389, 18:01 عصر
من مثال رو با int زدم دیگه تغییرات راحته
واسه همین ناراحتی ؟ :گیج:

edit1.Text:=floattostr(strtofloat(edit1.text))

بازم بشرطی که عددتون از 15 رقمی بزرگتر نشه!

Delphi7_love
سه شنبه 02 شهریور 1389, 18:09 عصر
بازم بشرطی که عددتون از 15 رقمی بزرگتر نشه!
ایشون گفتن میخوان توی محاسبات استفاده کنن و نیازی به اعداد بزرگتر از 15 رقم نیست

Felony
سه شنبه 02 شهریور 1389, 18:39 عصر
اگر هم علاقه ای به استفاده از اعداد بزرگتر از 15 رقم دارید میتونید به صورت زیر 0 های اول رو حذف کنید :
var
Chr: Char;
begin
for Chr in Edit1.Text do
if Chr <> '0' then
begin
Edit1.Text:= Copy(Edit1.Text, Pos(Chr, Edit1.Text), Length(Edit1.Text));
Exit;
end;
end;

arkia
چهارشنبه 03 شهریور 1389, 02:32 صبح
اگر هم علاقه ای به استفاده از اعداد بزرگتر از 15 رقم دارید میتونید به صورت زیر 0 های اول رو حذف کنید :
var
Chr: Char;
begin
for Chr in Edit1.Text do
if Chr <> '0' then
begin
Edit1.Text:= Copy(Edit1.Text, Pos(Chr, Edit1.Text), Length(Edit1.Text));
Exit;
end;
end;

ممنون آقای تاجیک اتفاقا ارقام بالا هستند 23 یا 24 رقمی هستش ، از این کد نتونستم استفاده کنم ای کاش بصورت تابع می نوشتیش که ورودیش استرینگ باشه و خروجیش اینتجر
--------------------

اگر تبدیل به عددش کنید صفر های اون برداشته میشه


edit1.Text:=inttostr(strtoint(edit1.Text))

اولش همینو تست کردم نشد با 24 یا 23 رقم سرو کار دارم

Felony
چهارشنبه 03 شهریور 1389, 04:11 صبح
ممنون آقای تاجیک اتفاقا ارقام بالا هستند 23 یا 24 رقمی هستش ، از این کد نتونستم استفاده کنم ای کاش بصورت تابع می نوشتیش که ورودیش استرینگ باشه و خروجیش اینتجر
خروجیش اینتیجر ؟!

Function RemoveZero(Const Str: String) : String;
var
Chr: Char;
begin
for Chr in Str do
if Chr <> '0' then
begin
Result:= Copy(Str, Pos(Chr, Str), Length(Str));
Exit;
end;
end;

hossein_h62
چهارشنبه 03 شهریور 1389, 11:30 صبح
اینم هست البته با خروجی استرینگ :



procedure TForm1.Button1Click(Sender: TObject);
var
temp,str:String;
i:integer;
begin
str:=Edit1.text;
for i:=1 to Length(Edit1.Text) do
begin
temp:=copy(str,1,1);
if temp = '0' then
begin
Delete(str, 1, 1);
end
else
end;
Edit1.Text:= str;
end;

arkia
چهارشنبه 03 شهریور 1389, 12:52 عصر
اینم هست البته با خروجی استرینگ :



procedure TForm1.Button1Click(Sender: TObject);
var
temp,str:String;
i:integer;
begin
str:=Edit1.text;
for i:=1 to Length(Edit1.Text) do
begin
temp:=copy(str,1,1);
if temp = '0' then
begin
Delete(str, 1, 1);
end
else
end;
Edit1.Text:= str;
end;



با این کد اگه داخل رشته صفر داشته باشیم اونم حذف میکنه؟

hossein_h62
چهارشنبه 03 شهریور 1389, 13:02 عصر
با این کد اگه داخل رشته صفر داشته باشیم اونم حذف میکنه؟

نه دوست عزیز از سمت چپ شروع میکنه به حذف صفرها و به اولین عدد غیر از صفری که رسید از حلقه خارج میشه.

arkia
چهارشنبه 03 شهریور 1389, 13:03 عصر
خروجیش اینتیجر ؟!

Function RemoveZero(Const Str: String) : String;
var
Chr: Char;
begin
for Chr in Str do
if Chr <> '0' then
begin
Result:= Copy(Str, Pos(Chr, Str), Length(Str));
Exit;
end;
end;

این پیغام رو میده کد قبلی هم که با تابع نبود همینو میداد میشه راجع بهش یه توضیح مختر بدید که این کد چیکار می کنه؟ :متفکر:

Felony
چهارشنبه 03 شهریور 1389, 13:17 عصر
چه پیغامی ، من که پیغامی نمیبینم ، برنامه نمونه رو ضمیمه کردم .

Mahmood_M
چهارشنبه 03 شهریور 1389, 14:23 عصر
این پیغام رو میده کد قبلی هم که با تابع نبود همینو میداد میشه راجع بهش یه توضیح مختر بدید که این کد چیکار می کنه؟
این ساختار ( ورودی ) حلقه for در دلفی 7 به پایین پشتیبانی نمیشه و فکر کنم از دلفی 2009 اضافه شده ، پس اگه از دلفی 7 به پایین استفاده میکنید پیغام خطا دریافت خواهید کرد !
می تونید به صورت زیر عمل کنید :
Function RemoveZero(Str: String) : Int64;
var
I : Integer;
begin
for I := 1 to Length(Str) do
begin
if StrToInt(Copy(Str, 1, 1)) <> 0 then
begin
Result := StrToInt64(Str);
Exit;
end;
Delete(Str, 1, 1);
end;
end;

برای کار با اعداد بزرگ حداکثر تا 19 رقم می تونید به وسیله ی Int64 داشته باشید که اون هم بیشترین مقدارش این هست : " 9223372036854775807 " ، برای رقم های بالاتر باید به صورت String و ... با اعداد کار کنید ، یک پکیج همراه با سورس و مثال در اینجا (http://delphiforfun.org/programs/Library/big_integers.htm) هست که می تونه کمکتون کنه ...

موفق باشید ...

arkia
چهارشنبه 03 شهریور 1389, 22:01 عصر
چه پیغامی ، من که پیغامی نمیبینم ، برنامه نمونه رو ضمیمه کردم .
برنامه شما هم این خطا رو میده دقیقا مثل خطای برنامه خودم

arkia
چهارشنبه 03 شهریور 1389, 22:05 عصر
این ساختار ( ورودی ) حلقه for در دلفی 7 به پایین پشتیبانی نمیشه و فکر کنم از دلفی 2009 اضافه شده ، پس اگه از دلفی 7 به پایین استفاده میکنید پیغام خطا دریافت خواهید کرد !
می تونید به صورت زیر عمل کنید :
Function RemoveZero(Str: String) : Int64;
var
I : Integer;
begin
for I := 1 to Length(Str) do
begin
if StrToInt(Copy(Str, 1, 1)) <> 0 then
begin
Result := StrToInt64(Str);
Exit;
end;
Delete(Str, 1, 1);
end;
end;

برای کار با اعداد بزرگ حداکثر تا 19 رقم می تونید به وسیله ی Int64 داشته باشید که اون هم بیشترین مقدارش این هست : " 9223372036854775807 " ، برای رقم های بالاتر باید به صورت String و ... با اعداد کار کنید ، یک پکیج همراه با سورس و مثال در اینجا (http://delphiforfun.org/programs/Library/big_integers.htm) هست که می تونه کمکتون کنه ...

موفق باشید ...

دوستان ممنون ، با این کد حل شد