PDA

View Full Version : رند کردن ساعت



Vahid.Shatery
جمعه 09 اردیبهشت 1390, 15:51 عصر
سلام

من داخل یک Edit جمع ساعات چند تا رکورد را نشون می دم .(به عنوان مثال 149:34 را در یک Edit)
حالا می خوام این عدد را رند کردم به 150 ( نه بو صورت 150:00) . چون می خوام یک سری عملیات ریاضی روش انجام بدم .

Felony
جمعه 09 اردیبهشت 1390, 16:35 عصر
اول باید اون رشته رو به یک عدد قابل فهم برای کامپیوتر تبدیل کنید ، با جایگزین کردن کاراکتر ":" که جدا کننده ساعت و دقیقه هست با کاراکتر "." یک عدد اعشاری داریم ( 149.34 ) حالا متیونیم با تنظیم خاصیت Round Mode روی rmUp به وسیله تابع SetRoundMode عدد رو به بالا گرد کنیم :

var
aStr: String;
aNum: Integer;
begin
aStr:= '149:34';
aStr:= StringReplace(aStr, ':', '.', [rfReplaceAll]);
SetRoundMode(rmUp);
aNum:= Round(StrToFloat(aStr));
ShowMessage(IntToStr(anum));
end;

Vahid.Shatery
جمعه 09 اردیبهشت 1390, 16:50 عصر
مرسی آقای تاجیک .
جواب گرفتم .

SAASTN
جمعه 09 اردیبهشت 1390, 17:44 عصر
هر چند آقا وحید جواب گرفتند ولی فکر نمی کنم تبدیل ساعات به عدد اعشاری با تبدیل ":" به "." کار درستی باشه. چون باعث تغییر مقدار حقیقی ساعات میشه، هر چند مقدار ناچیزیه. البته با فرض آقای تاجیک مبنی بر گرد کردن به بالا این عمل امکان پذیره، اما من فکر می کنم در مثالی که قرار گرفته چون دقایق بیشتر از 30 بودند ساعات به بالا گرد شدن.
یک نکته دیگه هم اینه که گفتند ساعات فوق از جمع چند ساعت دیگه به دست اومده، که این نشون میده ساعات و دقایق بصورت داده در دسترس هستند، حالا اگه فرض کنیم مثلا این اطلاعات در TDateTime نگهداری شده باشه (که البته کار درستی نیست) به چیزی شبیه به این میرسیم:
const
Count = 100;
var
TimeSum, TimeStart: TDateTime;
Time: TTime;
I, Hours: Integer;
begin
TimeSum := EncodeTime(0, 0, 0, 0);
TimeStart := TimeSum;
for I := 0 to Count - 1 do
begin
Time := EncodeTime(Random(24), Random(60), 0, 0);
TimeSum := TimeSum + Time;
end;
Hours := HoursBetween(TimeStart, TimeSum);
if MinuteOf(TimeSum) >= 30 then
Inc(Hours);
ShowMessage(IntToStr(Hours));
end;

باز هم اگر فرض بر رشته ای بودن داده باشه:
const
TimeStr = '149:34';
var
Hours, Minutes: Integer;
begin
Hours := StrToInt(LeftStr(TimeStr, Pos(':', TimeStr) - 1));
Minutes := StrToInt(RightBStr(TimeStr, Length(TimeStr) - Pos(':', TimeStr)));
ShowMessage(Format('H: %d, M: %d', [Hours, Minutes]));
end;
برای کد اول DateUtils و برای کد دوم StrUtils باید use بشن.

Felony
جمعه 09 اردیبهشت 1390, 19:10 عصر
هر چند آقا وحید جواب گرفتند ولی فکر نمی کنم تبدیل ساعات به عدد اعشاری با تبدیل ":" به "." کار درستی باشه. چون باعث تغییر مقدار حقیقی ساعات میشه
وقتی قراره یک عدد گرد بشه دیگه عدد اولیه معنایی نداره ، ایشون گفتن میخوان روی ساعت عملیات ریاضی انجام بدن پس نیازی به داشتن ساعت یا دقیقه اولیه ندارن .

البته با فرض آقای تاجیک مبنی بر گرد کردن به بالا این عمل امکان پذیره، اما من فکر می کنم در مثالی که قرار گرفته چون دقایق بیشتر از 30 بودند ساعات به بالا گرد شدن.

چیزی در این مورد تو سوالشون مطرح نشده ولی اگر هم اینطور باشه کد رو میشه خیلی ساده تر پیاده کرد :

var
aStr: String;
aNum: Integer;
begin
aStr:= '149:29';

if (StrToInt(Copy(aStr, Pos(':', aStr)+ 1, Length(aStr))) < 30) then
aStr:= Copy(aStr, 0, Pos(':', aStr) - 1)
else
aStr:= IntToStr(StrToInt(Copy(aStr, 0, Pos(':', aStr) - 1)) + 1);

aNum:= StrToInt(aStr);
ShowMessage(IntToStr(anum));
end;


باز هم اگر فرض بر رشته ای بودن داده باشه:
خوب این کد چه ربطی به سوال کاربر داره ؟ اینکه فقط ساعت و دقیقه رو جدا میکنه و نمایش میده !

tdkhakpur
جمعه 09 اردیبهشت 1390, 21:02 عصر
وقتی قراره یک عدد گرد بشه دیگه عدد اولیه معنایی نداره ، ایشون گفتن میخوان روی ساعت عملیات ریاضی انجام بدن پس نیازی به داشتن ساعت یا دقیقه اولیه ندارن .

توضیخا اینکه دقیقه عدد نیست و محدوده مشخصی داره یعنی میتونه بین 1 تا 59 قرار بگیره نه 1 تا 99 به همین دلیل استفاده مستقیم از round برای گرد نمودن دقیقه کار درستی نیست و از نظر حسابداری میتونه نتیجه کاملا اشتباه و زیان دهی رو به بار بیاره.
به همین دلیل نيازي به اين همه پيچيدگي برای تحلیل نيست فقط کافيه محدوده نهايي دقيقه رو به حالت استاندارد عدد تبديل کنيد و نيازي هم به اعمال شرط نخواهید داشت.


var
sTime:string;
p: integer;
num : real;
begin
sTime:='149:45';
p := Pos(':', sTime);
sTime[p]:='.';
num := StrTofloat(sTime)+0.20;
num := round(num);
ShowMessage(FloatToStr(num));
end;

SAASTN
جمعه 09 اردیبهشت 1390, 21:05 عصر
وقتی قراره یک عدد گرد بشه دیگه عدد اولیه معنایی نداره ، ایشون گفتن میخوان روی ساعت عملیات ریاضی انجام بدن پس نیازی به داشتن ساعت یا دقیقه اولیه ندارن .
چرا نداره! ببینید من گفتم با فرض شما (یعنی گرد کردن به بالا) تفاوتی نداره، که من از هیچ جای سوال کاربر این برداشت رو نمی کنم که گرد به بالا مد نظر بوده. اما اگه بخوایم رند با تعریف ریاضی داشته باشیم اون موقع فرقش رو نشون میده. کد شما یه مقدار که تورنج 0-59 هست رو بدون Scale میبره تو رنج 0-99. در واقعیت اگه توزیع دقایق رو خطی در نظر بگیریم نصف مقادیری که داریم به پائین گرد میشن ونصفشون به بالا، و توی شرایطی که شما ایجاد کردید همون مقادیر 5/6 شون به پائین گرد میشن و 1/6 شون به بالا. این یعنی دست بردن توی مقادیر حقیقی که باعث میشه تابع گرد کردن ما خروجی دقیقی نده. البته قبلا هم گفتم مقدار خطا با توجه به شرایط مسئله میتونه ناچیز باشه. حالا اگه فرض شما درست باشه در هر دو حالت تمام مقادیر به بالا گرد میشن که یعنی تفاوتی وجود نداره.

چیزی در این مورد تو سوالشون مطرح نشده
خوب آدم وقتی میگه رند منظورش رنده دیگه. اگه رند به بالا بخواد میگه رند به بالا! البته شاید ایشون واقعا منظورشون رند به بالا بوده باشه ها، ولی من از جملاتی که اینجا نوشتن همچین برداشتی نمی کنم.

ولی اگر هم اینطور باشه کد رو میشه خیلی ساده تر پیاده کرد :
این کد ساده تر از چیه؟
کد من:
LeftStr(TimeStr, Pos(':', TimeStr) - 1)// hours
RightStr(TimeStr, Length(TimeStr) - Pos(':', TimeStr))// minutes

کد شما:
Copy(aStr, 0, Pos(':', aStr) - 1)// hours
Copy(aStr, Pos(':', aStr)+ 1, Length(aStr))// minutes

خوب اینا که فرقی ندارن. تازه من یه پارامتر کمتر پاس دادم:بامزه:

خوب این کد چه ربطی به سوال کاربر داره ؟ اینکه فقط ساعت و دقیقه رو جدا میکنه و نمایش میده !
خوب من تصورم بر اینه که مسئله اصلی مطرح شده تو این تاپیک استخراج مقادیر عددی از دیتای موجوده،که حالا بصورت رشته یا TDateTime یا چیز دیگه هستند. اگر هم در مورد گرد کردن موردی بوده با پست شما و کد اول من (با توجه به نگاههای متفاوت) حل شده. با توجه به این مطلب من تو کد دوم فقط نحوه استخراج اون مقادیر از رشته رو نوشتم که با جایگزینی اون تو کد اول میشه به جواب رسید. که با اندکی تغییر میشه یه چیزی شبیه به کدی که شما قرار دادی:چشمک:

Felony
جمعه 09 اردیبهشت 1390, 21:23 عصر
به همین دلیل نيازي به اين همه پيچيدگي برای تحلیل نيست فقط کافيه محدوده نهايي دقيقه رو به حالت استاندارد عدد تبديل کنيد و نيازي هم به اعمال شرط نخواهید داشت.
پیچیدگی تحلیل ؟! این کدی هست که من در پست اول ارائه کردم :

var
aStr: String;
aNum: Integer;
begin
aStr:= '149:34';
aStr:= StringReplace(aStr, ':', '.', [rfReplaceAll]);
SetRoundMode(rmUp);
aNum:= Round(StrToFloat(aStr));
ShowMessage(IntToStr(anum));
end;

کد جناب عالی :

var
sTime:string;
p: integer;
num : real;
begin
sTime:='149:45';
p := Pos(':', sTime);
sTime[p]:='.';
num := StrTofloat(sTime)<font color="red"><b>+0.40;</b></font>
num := round(num);
ShowMessage(FloatToStr(num));
end

...


این کد ساده تر از چیه؟
خوب اینا که فرقی ندارن. تازه من یه پارامتر کمتر پاس دادم

کد شما یه مقدار که تورنج 0-59 هست رو بدون Scale میبره تو رنج 0-99
واقعا کد شما با کدی که من در پست دومم قرار دادم فرقی نداره ؟! مطمئنی ؟!
من اون مورد گرد کردن اعداد دقیقه که شما گفتی ( در بالا بهش نقل قول کردم ) رو با اون کد پیاده سازی کردم کد رو دقیقا مشاهده کنید ( قسمتی از کد رو قرار دادید و میگید فرقی نمیکنن ؟!!! ) ، فکر میکنم زمین تا آسمون فرق داشته باشن !

tdkhakpur
جمعه 09 اردیبهشت 1390, 21:28 عصر
پیچیدگی تحلیل ؟! این کدی هست که من در پست اول ارائه کردم :

var
aStr: String;
aNum: Integer;
begin
aStr:= '149:34';
aStr:= StringReplace(aStr, ':', '.', [rfReplaceAll]);
SetRoundMode(rmUp);
aNum:= Round(StrToFloat(aStr));
ShowMessage(IntToStr(anum));
end;

کد جناب عالی :

var
sTime:string;
p: integer;
num : real;
begin
sTime:='149:45';
p := Pos(':', sTime);
sTime[p]:='.';
num := StrTofloat(sTime)<font color="red"><b>+0.40;</b></font>
num := round(num);
ShowMessage(FloatToStr(num));
end

...



واقعا کد شما با کدی که من در پست دومم قرار دادم فرقی نداره ؟! مطمئنی ؟!
من اون مورد گرد کردن اعداد دقیقه که شما گفتی ( در بالا بهش نقل قول کردم ) رو با اون کد پیاده سازی کردم کد رو دقیقا مشاهده کنید و قسمتی از اون مشاهده نکنید ، فکر میکنم زمین تا آسمون فرق داشته باشن !
مثل اینکه یه چیزیت میشه ها.
اون بالا عدد .0.40 که بعدا اصلاح به 0.20 شد تحلیل اصلی هست نه تبدیل رشته به عدد یا تغییر کالن به نقطه.
یعنی این


num := StrTofloat(sTime)+0.20;

Felony
جمعه 09 اردیبهشت 1390, 21:42 عصر
مثل اینکه یه چیزیت میشه ها.
اون بالا عدد .0.40 که بعدا اصلاح به 0.20 شد تحلیل اصلی هست نه تبدیل رشته به عدد یا تغییر کاکن یه سمس کالن.
خونسردیتو حفظ کن که بتونی یکم آرومتر تایپ کنی تا اشکال تایپی نداشته باشی !

اون کدی که اول قرار دادی و من نقل قول کردم کد مورد نظر من بود و اشکال داشت ، خیلی جالبه بعد از اصلاح کد به حرفی که من بر طبق پست اولیتون زدم ایراد میگیرد ، ایول !

tdkhakpur
جمعه 09 اردیبهشت 1390, 21:55 عصر
خونسردیتو حفظ کن که بتونی یکم آرومتر تایپ کنی تا اشکال تایپی نداشته باشی !

چشم از این به بعد خون گرم میشم.


اون کدی که اول قرار دادی و من نقل قول کردم کد مورد نظر من بود و اشکال داشت ، خیلی جالبه بعد از اصلاح کد به حرفی که من بر طبق پست اولیتون زدم ایراد میگیرد ، ایول !

ببین هر چقدر میگم که بهت برنخوره باز ناراحت میشی .
در کل تا اونجایی که قرائن نشون میده اونچه از برنامه نویسی یاد گرفتی فقط بازی با دستورات و کامپوننتهاست تا برنامه نویسی. آخه اون کدی رو که ارسالی کردی به چه دردی میخوره خب همه میدونن چطوری : رو به . تبدیل کنن منظور اصلی و تحلیل کد چی میشه این سایت برای جمع کردن پست توخالی نیست اسم این سایت برنامه نویسه نه اینکه فقط دو سه خط بنویسی که معلوم نیست چه کاری انجام میده.
حالا برسیم به کد ارسالی شما:
شما اون عمل گرد کردن رو با دقیقه انجام دادی به چه درد میخوره مگه میشه یک بازه عددی رو همین طوری بدون تحلیل گرد کرد؟

Felony
جمعه 09 اردیبهشت 1390, 22:06 عصر
در کل تا اونجایی که قرائن نشون میده اونچه از برنامه نویسی یاد گرفتی فقط بازی با دستورات و کامپوننتهاست تا برنامه نویسی. آخه اون کدی رو که ارسالی کردی به چه دردی میخوره خب همه میدونن چطوری : رو به . تبدیل کنن منظور اصلی و تحلیل کد چی میشه که این سایت برای جمع کردن پست توخالی نیست اسم این سایت برنامه نویسه نه اینکه فقط دو سه خط بنویسی که معلوم نیست چه کاری انجام نمیده.
حالا برسیم به کد ارسالی شما:
شما اون عمل گرد کردن رو با دقیقه انجام دادی به چه درد میخوره مگه میشه یک بازه عددی رو همین طوری بدون تحلیل گرد کرد؟
کدوم کد رو میگی ؟ کدی که تو پست اول قرار دادم ؟ اون که مشکلی نداره من اینطور برداشت کردم که کاربر میخواد عدد رو به بالا گرد بشه و اون کد هم درست همین کار رو میکنه .

کدی که تو پست دوم قرار دادم ؟ اون که دقیقا کاری رو میکنه که کد شما انجام میده !

:قهقهه:میشه کمتر شر و ور ببافی ؟

میشه بگید شما عمل گرد کردن رو با چی انجام دادی ؟! وقتی 149:34 با 0.20 حاصل میشه 149:54 ؛ تو ولایت ما به اون 54 هم میگن دقیقه ، حالا تو ولایت شما چه جوره نمیدونم .

tdkhakpur
جمعه 09 اردیبهشت 1390, 22:14 عصر
میشه بگید شما عمل گرد کردن رو با چی انجام دادی ؟! وقتی 149:34 با 0.20 حاصل میشه 149:54 ؛ تو ولایت ما به اون 54 هم میگن دقیقه ، حالا تو ولایت شما چه جوره نمیدونم .

آفرین - مثل اینکه سر عقل اومدی.
ببین وقتی شما عددی رو گرد میکنی اون عدد نسبت به فاصله بین 0 تا 50 و یا بین 50 تا 100 در نظر گرفته میشه اگه عدد زیر 50 باشه گرد به پایین میشه و با 0 جمع میشه و اگه بالاتر از 50 باشه گرد به بالا میشه یعنی یک رقم اضافه میگیره.
ولی در این تحلیل چون بازه عدد بین 0 تا 60 هست یعنی حد پایین باید عدد 30 در نظر گرفته بشه به همین دلیل برای اینکه به تابع گرد (round)بفهمونی که عدد در محدوده 0 تا 100 در کدوم سطح قرار داره باید عدد0.20 رو بهش اضافه کنی تا نتیجه درست از آب در بیاد.
بهتره یه خورده رو برنامه های حسابداری و حقوق و دستمزد مطالعه داشته باشید تا بدونید فرق گرد نمودن یک رقم حسابداری با گرد کردن یک عدد خشک خالی فرق داره.

Felony
جمعه 09 اردیبهشت 1390, 22:36 عصر
همون پست 12 جوابت هست ؛ کاشکی میتونستی جملات فارسی رو تحلیل کنی ، عیبی نداره عوضش تخصص بالایی در شاد کردن دیگران داری ، خدا تو رو از این سایت نگیره .

vcldeveloper
جمعه 09 اردیبهشت 1390, 23:32 عصر
آقایون، مواظب پست هایی که ارسال می کنید، باشید، و هر تاپیکی رو محل بروز کدورت های شخصی نکنید. اگر هم مطلبی اشتباه هست، اینقدر روی مطلب اشتباه تون تاکید نکنید!

آقای تاجیک، گرد کردن دقیقه با گرد کردن یک عدد اعشاری معمولی فرق میکنه، و شما در کدتون این رو لحاظ نکردید، این جر و بحث کردن نداره.

آقای خاکپور، وقتی نقد یک مطلب همراه با تیکه پرانی هایی مثل "قرائن نشون میده اونچه از برنامه نویسی یاد گرفتی فقط بازی با دستورات و کامپوننتهاست تا برنامه نویسی" باشه، نباید انتظار داشته باشید که بحث فنی خاصی صورت بگیره، و جریان بحث تبدیل میشه به رو کم کنی و تیکه پرانی!

اگر قرار باشه در هر تاپیکی که دو نفری پست ارسال می کنید، جریان بحث تاپیک رو اینطوری منحرف کنید، اون وقت ناچار میشم با هر دو کاربر برخورد کنم. لطفا پست یا پیام خصوصی هم ارسال نکنید که مقصر فلانی بود. من تقریبا همه پست های این چند وقت شما در این مدل تاپیک ها رو خوندم، و هر دو به نوعی در منحرف کردن بحث ها مقصر هستید. خواهشا رعایت کنید.

موفق باشید

Felony
جمعه 09 اردیبهشت 1390, 23:40 عصر
آقای تاجیک، گرد کردن دقیقه با گرد کردن یک عدد اعشاری معمولی فرق میکنه، و شما در کدتون این رو لحاظ نکردید، این جر و بحث کردن نداره.
بله فرق داره و در اون بحثی نیست ، بحث این جا هست که من چند بار گفتم در کدی که در پست اول قرار دادم این موضوع رو لحاظ نکردم و در کدی که در پست دوم قرار دادم این موضوعی که شما فرمودید لحاظ شده و عدد بر مبنای دقیقه گرد میشه ولی این کاربر مثل همیشه میاد و یه پستی میده و در آخر هم برای اینکه کسی بهش نگه اشتباه کردی یا اشتباه متوجه شدی شروع میکنه زمین رو به آسمون بافتن یا قوانین متا فیزیک درست کردن ، حداقل جناب عالی که مدیر این سایتی و بیشتر وقت روزانتون رو وقف این سایت میکنید به این مسئله واقف هستید .

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

یا حق .

tdkhakpur
جمعه 09 اردیبهشت 1390, 23:54 عصر
اون پست رو اصلاح کردي.
در ضمن ما از شما ايراد نگرفتيم اين شماييد که فکر ميکني کسي يه نظري بده جات تنگ ميشه.


ولی این کاربر مثل همیشه میاد و یه پستی میده و در آخر هم برای اینکه کسی بهش نگه اشتباه کردی یا اشتباه متوجه شدی شروع میکنه زمین رو به آسمون بافتن یا قوانین متا فیزیک درست کردن ، حداقل جناب عالی که مدیر این سایتی و بیشتر وقت روزانتون رو وقف این سایت میکنید به این مسئله واقف هستید

مثل اينکه عشق مدير شدن داري ..
ولي از نظر من قدرت تحليل نداري..

SAASTN
شنبه 10 اردیبهشت 1390, 00:11 صبح
واقعا کد شما با کدی که من در پست دومم قرار دادم فرقی نداره ؟! مطمئنی ؟!
من اون مورد گرد کردن اعداد دقیقه که شما گفتی ( در بالا بهش نقل قول کردم ) رو با اون کد پیاده سازی کردم کد رو دقیقا مشاهده کنید ( قسمتی از کد رو قرار دادید و میگید فرقی نمیکنن ؟!!! ) ، فکر میکنم زمین تا آسمون فرق داشته باشن !
آقا مجتبی اذیتمون نکن اخوی.:لبخند: شما اومدی کد اولی که من تو پست 4 گذاشتم رو با کدی که خودت توپست 5 گذاشتی مقایسه می کنی بعد می گی ساده تره، آخه این دوتا کد که قابل مقایسه نیستن، یکی داره رو TDateTime کار می کنه یکی رو string. ببینید، من بازم میگم، این کد از نظر من دو بخش مجزا داره: یکی یه قالب کلی گرد کردن دو مقدار عددی ساعت و دقیقه به یک مقدار ساعت، و بخش دیگه استخراج این دو عدد از یه نوع داده دیگه. بخش گرد کردن که تو هر دو کد یه مقایسه بخش دقیقه با عدد 30 هست که هر دو کد از این نظر مشابهن. حالا می مونه بخش استخراج که شما رشته رو خوندی من TDateTime رو. خوب معلومه فرق می کنن اصلا هم نمیشه گفت گفت کدوم ساده تر از کدوم هست چون فضاشون فرق داره. این شد که من پرسیدم: این کد ساده تر از چیه؟ اگر بخواد مقایسه ای صورت بگیره باید بین پارس کردن رشته شما با پارس کردن رشته در بخش دوم کد من صورت بگیره، که شما با Copy کار کردی من با RightStr و LeftStr که اینا هم خیلی با هم فرق ندارن. شما کد اول من رو هم نگاه کنی می بینی قالب همینه، حالا یکم شاخ و برگ الکی برای ایجاد داده تصادفی داره، و الا یه ساعت و دقیقه از TDateTime بیرون کشیده شده و ... حالا دیگه تبدیل نوع ها یا اختصاص به متغیر ها کم و زیاد بشن که دیگه فرق نیست، فکر می کنم برجسته ترین قسمت کار همون بخشیه که من بیرون کشیدم.

ولی در این تحلیل چون بازه عدد بین 0 تا 60 هست یعنی حد پایین باید عدد 30 در نظر گرفته بشه به همین دلیل برای اینکه به تابع گرد (round)بفهمونی که عدد در محدوده 0 تا 100 در کدوم سطح قرار داره باید عدد0.20 رو بهش اضافه کنی تا نتیجه درست از آب در بیاد.
من خیلی عذر می خوام ولی این تبدیل شما کاملا اشتباهه. این کاری که شما کردی تبدیل مبدا یا Offset هست. خوب شما بازه رو از 0-59 بردی به 20-79 نه 0-99. البته نتیجه در مورد گرد کردن درست جواب می ده ولی باز هم تبدیل داده درست انجام نشده. اگه ما می خوایم مقدار رو از دقیقه به کسری از ساعت تبدیل کنیم باید مقیاس گذاری یا Scale انجام بدیم برای این منظور هم باید مقدار دقیقه رو در 100/60 ضرب کنیم. یعنی طول بازه مقصد تقسیم بر طول بازه مبدا.

tdkhakpur
شنبه 10 اردیبهشت 1390, 00:24 صبح
من خیلی عذر می خوام ولی این تبدیل شما کاملا اشتباهه. این کاری که شما کردی تبدیل مبدا یا Offset هست. خوب شما بازه رو از 0-59 بردی به 20-79 نه 0-99.

نه اينطور نيست تحليل کار بر روي يک رقم به موقعيت ارقام در محاسبه بستگي داره در اين مورد چون عدد دقيقه هست پس قطعا بين 0 تا 60 هست به همين دليل اگر شما تا 20 واحد به اعدادبين 0 تا 30 هم اضافه کنيد قدرت رسيدن به نقطه اي که تابع round رو تحت تاثير قرار بده رو نداره .
را ههاي رياضي زيادي براي ايجاد چنين ارقامي هست که شما اين راه رو با گرفتن درصد از رقم دقيقه بدست اوديد.

SAASTN
شنبه 10 اردیبهشت 1390, 00:53 صبح
نمی دونم مخالفت شما با کدوم بخش گفته من بود

شما بازه رو از 0-59 بردی به 20-79 نه 0-99
این بخش رو که قبول دارید. من صحبتم اینه که ما میایم با تبدیل شما مثلا 173:49 رو تبدیل می کنیم به 173.69 در صورتی که 173.69 معادل اعشاری 173:49 نیست بلکه معادل صحیح 173.8167 هست. البته تو پست قبلی هم گفتم عمل گرد کردن روی این مقدار جواب مورد نظر ما رو میده، ولی من بیشتر این مدنظرم بود که یه وقت کسی نیاد از این تبدیل استفاده کنه و یکوقت ضرب در حق الزحمه ساعتی یارو بکنه تا حقوقش رو بدست بیاره، این اشتباهه، حالا اگه با یه کارخونه 10000 کارگری طرف باشیم دیگه اشتباه نیست، فاجعه است!

tdkhakpur
شنبه 10 اردیبهشت 1390, 12:50 عصر
ولی من بیشتر این مدنظرم بود که یه وقت کسی نیاد از این تبدیل استفاده کنه و یکوقت ضرب در حق الزحمه ساعتی یارو بکنه تا حقوقش رو بدست بیاره، این اشتباهه، حالا اگه با یه کارخونه 10000 کارگری طرف باشیم دیگه اشتباه نیست، فاجعه است

کلا round کردن هر رقمي در محاسبات اشتباه هست مگه وقتي شما با round محاسبه انجام ميديد چيزي جز اضافه کردن يک واحد به قسمت صحيح يا اصلا ثابت گذاشتن اين مقدار نيست به همين دليل وقتي يک محاسبه اي با اعمال round ميخواد از عدد يک مقدار تقريبي رو بدست بياره به نظرم از خير چنين ضرر و زياني گذشته.
اصولا اين مثل کار بيمه ماشين ميمونه که براي نتيجه کارش تقريب ميگيره و تخمن مي زنه که در عرض يک سال چه تعداد ماشين ميتونن بيمه حوادث بگيره و چه تعداد نگيره و لزوما اونايي که از بيمه استفاده نمي کنن همونهايي هستند که به فرض در round زير 0.50 و اونايي که از بيمه استفاده ميکنن بالا 0,50 هستند پس بنا به اين تفاصيل تقريبا ضرري قابل توجهي در اين بين نميتونه وجود داشته باشه.