ورود

View Full Version : سوال: چگونگی کار با فیلد هایی که مبلغ در آن ها ذخیره میگردد



farzadkamali
چهارشنبه 23 اردیبهشت 1394, 11:39 صبح
با سلام
توی پروژه ها معمولا برخی از فیلدها توشون مبلغ ذخیره میشه.
این فیل ها باید نوعشون چی باشه؟ float - int - money
و سوال دوم اینه که برای هر کدام از انواع داده بالا محاسبه به چه صورت هست.
من توی محاسبات بعضی مواقع که مقدار ممکنه اعشاری بشه به مشکل بر میخورم.(حالا مقدار اعشار زیاد مهم نیست و گرد بشه هم موردی نداره) اما گاهی overflue و گاهی مشکل سرریز به دلیل int و float
نوع داده من float هست. یک هزینه رو میخوام بین چند نفر تقسیم کنم به صورت زیر:


module.scu.FieldByName('amountpayable').Value:=str toFloat(edit1.text)+Module.members.fieldbyname('qt y').value div tqty


tqt یه متغیره double هست و تعداد کل نفرات هست و با دستورات sql مقدارش محاسبه میشه. و فیل های qty و amountpayable جداول int هستند
یا دستوراتی مثل دستور فوق که چند تا مقدار یا متغیر با هم ضرب و تقسیم میشن تا مقدار این فیلد بدست بیاد.
دوستان برای این موارد چکار میکنن؟ همه رو float میگیرین؟ یا گرد میکنین و همه رو int میگیرین؟
مقدار money چه طوره؟ برای محاسبات باید تبدیل نوع ش کرد؟ و آیا توی دلفی تعریف شده؟
چه باید کرد که خطای overflue به دلیل عدم تطابق نوع نده.
اینم اروری که گاها میده(حالا برخی موارد با کمی تغییر).
بعضی موقع ها هم نمیده و عملیات کامل انجام میشه در حالی که دستورات و مقادیر و... همونه



---------------------------
EVariantOverflowError: Overflow while converting variant of type (Double) into type (Integer)
---------------------------

یوسف زالی
چهارشنبه 23 اردیبهشت 1394, 12:12 عصر
سلام. پیشنهاد من Decimal هست.
محاسبات رو روی Extended انجام بدید، آخر کار با توجه به نیازتون اون رو گرد یا قطع کنید. نیازی هم نیست که به جای / از div استفاده کنید.
البته تمام اینها بستگی مستقیم داره به کاری که دارید انجام می دید.

farzadkamali
چهارشنبه 23 اردیبهشت 1394, 17:02 عصر
چند تا سوال
div با / چه تفاوتی داره؟ مگه هر دو تقسیم نیست. به جای div علامت / رو که گذاشتم دیگه او ارور بالا که گفتم رو نداد در حالی که با div میده.
در دلفی برای تبدیل نوع extended به سایر نوع های داده (مثلا string یا...) چه باید کرد؟

ehsan_faal
چهارشنبه 23 اردیبهشت 1394, 17:34 عصر
var x: Extended;


begin
x := 2431371;
Writeln(Extended.ToString(x));
Readln;


end.

یوسف زالی
چهارشنبه 23 اردیبهشت 1394, 21:28 عصر
این که ارور نمی ده اتفاقا خطرناکه! تست کنید ببینید یه عدد بزرگ نداده؟ اگر بله، تقسیم بر صفر شده.
فرقش هم در اینه که div تقسیم می کنه و قسمت صحیح رو بر می گردونه.
13 و 4 رو تست کنید.