PDA

View Full Version : گرد کردن اعداد صحیح



Mask
چهارشنبه 04 فروردین 1389, 02:39 صبح
با سلام
میدونم که از نظر ریاضی این حرف معنی نداره.(چون گرد کردن مخصوص اعداد اعشاریه)
اما میخام مثلا اگه عدد 123 برنامم گرفت تبدیل بشه به 120
یا اگه 128 گرفت تبدیل بشه به 130
منظورم اینه که اگه عدد آخر کمتر از 5 بود بشه 0 و اگه بیشتر از 5 بود بشه 10.
ممنون از جوابتون.

Felony
چهارشنبه 04 فروردین 1389, 07:17 صبح
نمیدونم برای این کار تابعی هست یا نه ( احتمالا هست ) ولی من یه تکه کد نوشتم و درست کار میکنه :

Function RoundNumber(Number: String): String;
var
Num1,Num2: Byte;
begin
Num1:= StrToInt(Number[Length(Number)]);
Num2:= StrToInt(Number[Length(Number)-1]);
if Num1>= 6 then Inc(Num2);
Result:= Copy(Number,0,Length(Number)-2)+ IntToStr(Num2)+'0';
end;

Hadi_Fayyaz
چهارشنبه 04 فروردین 1389, 14:14 عصر
با سلام
میدونم که از نظر ریاضی این حرف معنی نداره.(چون گرد کردن مخصوص اعداد اعشاریه)
اما میخام مثلا اگه عدد 123 برنامم گرفت تبدیل بشه به 120
یا اگه 128 گرفت تبدیل بشه به 130
منظورم اینه که اگه عدد آخر کمتر از 5 بود بشه 0 و اگه بیشتر از 5 بود بشه 10.
ممنون از جوابتون.

سلام دوست عزيز
يه راه حل اينه كه اول عددت رو بر ده تقسيم كني بعد اون رو گرد كني و بعد دوباره در 10 ضرب كني
روتين زير يه عدد از يك Edit دريافت ميكنه و اون رو به همون صورت كه شما ميخوايد گرد ميكنه



procedure TForm1.Button1Click(Sender: TObject);
begin
SetRoundMode(rmUP);
Edit1.Text:=IntToStr(Round(StrToInt(Edit1.Text)/10)*10);
end;

doosbedari
سه شنبه 02 مهر 1392, 19:50 عصر
دوستان همه يه منظورو دارن ولي به روش هاي مختلف

يكي زحمت بكشه يه فايل براي دانلود برا همه بذاره،بقيه استفاده كنن و تغييرش بدن
اصل دوستان اينو مي خوان كه
هر عددي رو خواستم به هر عدد رندي تبديل كنند
مثال
1252 بشه 1260 يا 1300
16525 بشه 16530 يا 16600 يا 17000
1265347 بشه 1265350 يا 1265400 يا 1266000 يا 127000 يا 130000


و تعداد رقم هاي رند كردن دست خودشون باشه !!
مثال آخري
از راست به چپ
1رقم يا 2رقم يا 3رقم يا 4رقم

doosbedari
سه شنبه 02 مهر 1392, 19:56 عصر
يه چيزي مثل اين
Label1.Caption = Math.Round(Text1.Text, 3)

ولي برا اعداد صحيح

MohsenB
سه شنبه 02 مهر 1392, 22:37 عصر
سلام

چقدر کیف میکنم از حل اینجور سوالات ، به آدم انرژی میده :

برای توضیح ، یه حالت ساده برای فقط رقم یکان :

i2:= Round(i1 / 10) * 10;

حالا میشه از همین روش یه تابع قدرتمند و ساده نوشت :

function mbRound(iValue :Integer; iStep :Byte = 1):Integer;
var vStep :Integer;
begin
vStep:= Floor(Power(10, iStep));
Result:= Round(iValue / vStep) * vStep;
end;

موفق باشید

Ananas
چهارشنبه 03 مهر 1392, 00:31 صبح
سلام.
pascal

function RoundToNum(X: Integer; RoundParam : Integer = 10):Integer;
begin
Result := (X div RoundParam) * RoundParam;
if (((X - Result) * 2) > RoundParam) then
Result := Result + RoundParam;
end;

C++‎‎

int RoundToNum(int X, int RoundParam)
{
int Result = int(X / RoundParam) * RoundParam;
if (((X - Result) * 2) > RoundParam)
Result += RoundParam;
return Result;
};