ورود

View Full Version : سوال: تقسیم یک فیلد زمانی بر عدد



narpco
پنج شنبه 27 آذر 1399, 13:25 عصر
سلام از دستور زیر که قبلا در یک تاپیکی در مورد زمان جناب eb_1345 فرموده بودن
به نتیجه ضرب 26 روز در 7:20 رسیدم = 190:40


حالا یک فیلد داریم بدون فرمت بدون ماسک که زمان 190:40 داخلش هست

میخواهیم این عدد را ابتدا تقسیم بر 365 روز نماییم------- و نتیجه بدست امده را مثلا ضرب در 125 روز کنیم

ممنون میشم راهنمایی بفرمایید فرمول چگونه خواهد بود


190:40/365= x1
x1 * 125 = نتیجه به دقیقه

eb_1345
پنج شنبه 27 آذر 1399, 14:10 عصر
سلام از دستور زیر که قبلا در یک تاپیکی در مورد زمان جناب eb_1345 فرموده بودن
به نتیجه ضرب 26 روز در 7:20 رسیدم = 190:40





Private Sub vv_Click()
Dim snatije1 As Integer
Dim SplitLeft1 As Integer
Dim SplitRigth1 As Integer
Dim iday1 As Variant


Dim MOR As Variant
Dim MOGH As Variant
MOR = Nz(con_work_time_day_byLAW)
MOGH = Nz(con_modat_roz)
iday1 = 26




snatije1 = (Val(Split(MOR, ":")(0)) * 60 * iday1) + Val((Split(MOR, ":")(1))) * iday1


SplitLeft1 = Int(snatije1 / 60)
SplitRigth1 = snatije1 Mod 60




If SplitRigth1 < 9 Then SplitRigth1 = "0" & SplitRigth1


dd = SplitLeft1 & ":" & SplitRigth1




End Sub













حالا یک فیلد داریم بدون فرمت بدون ماسک که زمان 190:40 داخلش هست

میخواهیم این عدد را ابتدا تقسیم بر 365 روز نماییم------- و نتیجه بدست امده را مثلا ضرب در 125 روز کنیم

ممنون میشم راهنمایی بفرمایید فرمول چگونه خواهد بود


190:40/365= x1
x1 * 125 = نتیجه به دقیقه


سلام
چرا از همان اول زمان را تبدیل به دقیقه نمی کنید که در انجام عملیات ضرب و تقسیم مشکلی نداشته باشید . منظورم اول 190:40 را به دقیقه تبدیل کن و بعد نتیجه را تقسیم بر 365 و ضرب در 125

کد زیر برای تبدیل زمان به دقیقه و ضرب و تقسم آن :



Dim Strtime As String
Dim Intnatije As Integer
Strtime = (Val(Split(TxtTime, ":")(0)) * 60) + Val((Split(TxtTime, ":")(1)))
Intnatije = Val(Strtime / 365) * 125

narpco
پنج شنبه 27 آذر 1399, 15:06 عصر
[VB]

من با ایند کد رسیدم به مرحله ای که میگه 190:40 تبدیل به دقیقه = 11440 دقیقه و این عدد /365 = 31 دقیقه برای هر روز ......
حالا میخواهیم نتیجه رو از اخر به اول تست کنیم
می گوییم : 31 *365 = 11315 دقیقه میشود که با عدد اولیه (11440) معادل 125 دقیقه تفاوت دارد که این تفاوت ناشی از اعشاری بودن عدد اولیه است که ما در نظرش نمیگیریم

میخواستم بدونم برای صفر کردن این اختلاف یا به صفر نزدیک تر کردنش چیکار کنیم ؟


ممنونم

eb_1345
پنج شنبه 27 آذر 1399, 15:44 عصر
Dim snatije1 As Integer
Dim SplitLeft1 As Integer
Dim SplitRigth1 As Integer
Dim iday1 As Variant
Dim MOR As Variant
Dim MOGH As Variant
MOR = Nz(con_work_time_day_byLAW)
MOGH = Nz(con_modat_roz)
iday1 = 26
'''''part 1---------------------------------------
snatije1 = (Val(Split(MOR, ":")(0)) * 60 * iday1) + Val((Split(MOR, ":")(1))) * iday1
SplitLeft1 = Int(snatije1 / 60)
SplitRigth1 = snatije1 Mod 60
If SplitRigth1 < 9 Then SplitRigth1 = "0" & SplitRigth1
txtTime = SplitLeft1 & ":" & SplitRigth1
'''''part 2---------------------------------------
Dim IMIN1 As Integer
IMIN1 = (Val(Split(Me.txtTime, ":")(0))) * 60 + Val((Split(Me.txtTime, ":")(1)))
IMIN1 = IMIN1 / 365
Txtmin = IMIN1







من با ایند کد رسیدم به مرحله ای که میگه 190:40 تبدیل به دقیقه = 11440 دقیقه و این عدد /365 = 31 دقیقه برای هر روز ......
حالا میخواهیم نتیجه رو از اخر به اول تست کنیم
می گوییم : 31 *365 = 11315 دقیقه میشود که با عدد اولیه (11440) معادل 125 دقیقه تفاوت دارد که این تفاوت ناشی از اعشاری بودن عدد اولیه است که ما در نظرش نمیگیریم

میخواستم بدونم برای سفر کردن این اختلاف یا به صفر نزدیک تر کردنش چیکار کنیم ؟


ممنونم


چون دیگر فیلدهای موثر در محاسبات در اختیار ندارم نمیتوانم دقیقاً کد مربوطه رو ارائه بدهم. ولی دو راه متصور است:
1- در کد پست 2 متغیر Intnatije را از نوع عدد صحیح تعریف کرده بودم و میتوان آن را از نوع اعشاری تعریف و با تابع round آن را رند نمائید که به نتیجه ضرب روز در 365 نزدیک شود
2 - شرط بگذارید که اگر Strtime ( در کد پیشنهادی پست 2)با حاصل ضرب روز در 365 مساوی بود همان Strtime در غیر اینصورت نتیجه حاصلضرب روز در 365

narpco
پنج شنبه 27 آذر 1399, 15:46 عصر
اجاره بدین من یک فایل تستی درست کنم که شما زحمت میکشید وقت میزارید نتیجه درست بگیریم که ارشیو بشه ..ممنون چند دقیقه دیگه بر میگردم ...

narpco
پنج شنبه 27 آذر 1399, 16:16 عصر
https://s16.picofile.com/d/8417883926/7c7e3ce8-673c-4886-b674-c7eb9f74f74f/time.rar
لینک فایل خدمت شما .....قبل از هر چیز اگر در فیلد مدت زمان قرارداد خالی بود یک عدد تایپ کنید مثلا 10
بعد روی دکمه محاسبه زمان کلیک کنید همه فیلد ها اتوماتیک تکمیل میشوند

سمت راست فرم مغایرت عددی اتوماتیک محاسبه میگردد
با سپاس

eb_1345
پنج شنبه 27 آذر 1399, 17:28 عصر
https://s16.picofile.com/d/8417883926/7c7e3ce8-673c-4886-b674-c7eb9f74f74f/time.rar
لینک فایل خدمت شما .....قبل از هر چیز اگر در فیلد مدت زمان قرارداد خالی بود یک عدد تایپ کنید مثلا 10
بعد روی دکمه محاسبه زمان کلیک کنید همه فیلد ها اتوماتیک تکمیل میشوند

سمت راست فرم مغایرت عددی اتوماتیک محاسبه میگردد
با سپاس
فایل اصلاح شده رو از ضمیمه بررسی بفرما!

eb_1345
پنج شنبه 27 آذر 1399, 17:53 عصر
جناب ناصریان نمونه رو اصلاح کردم .
لطفاً مجدداً دانلود و بررسی بفرما!

نیازی به آن تابع RoundUp نبود
با اضافه کردن 4/10 به txt_final و رند کردن آن نتیجه تقریباً به واقعیت نزدیک است
در واقع با اضافه کردن 4/10 به مقدار txt_final بسمت بالا رند میشود


ضمناً فرمت تکست باکس Txtmin را در حالت Standard قرار دادم

الآن دارم جائی میروم ، مشکل برطرف نشد اعلام بفرما تا بعداً ان شاءالله برطرف نمایم

narpco
پنج شنبه 27 آذر 1399, 18:49 عصر
مشکل که کامل حل شد دم شما گرم ....اصلا مغایرتی نداره .....بسیار ممنون:تشویق::تشویق::تشویق: