delphi4arab منتديات دلفي للعرب

نسخة كاملة : تقريب العدد 999.999 الى 1000 عن طريق جمل sql مع العلم بان الرقم الكسري في تزايد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
مع العلم بان الرقم الكسري في تزايد يعني 1499.999 المراد تقريبها الى 1500
السلام عليكم

ما محرك قاعدة البيانات المستعمل ؟
على ما أظن أغلب المحركات تدعم ROUND
مثال
كود :
SELECT ROUND(FieldName,0) AS RoundedFieldName FROM TableName;
بالتوفيق
ولكن قد جربت هذا ولم ينجح
فانا لدي منظومة ماليه تقوم بقسمة مثلا 1000 دينار على 4100 شخص كي تعطيني النتيجة قيمة سهم كل شخص
ثم اقوم بضرب هذه الاسهم على كل قروب مقسم على 1000 فاتظهر لي النتيجة كما في الاله الحاسبة ولكن حين جمع القيم الاحظ بان المجموع ليس 1000 بل 999.128 فكيف اقرب هذا الرقم او ما يليه من عمليات حسابية كي يكون الناتج 100+500+2000 وهكذا دون نقص او كسور
أخي جرب استعمال الدالة FormatFloat مثال
edit4.Text:=FormatFloat('0.00',strtofloat(edit3.text));

بالتوفيق
السلام عليكم
إقتباس : ولكن قد جربت هذا ولم ينجح
ضع المحاولة إذا أمكن
كود :
procedure TForm5.Button6Click(Sender: TObject); begin if (Edit7.Text <>'') and (Edit8 .Text <>'') then Edit9 .Text:=Formatfloat('0.000', (strToFloat(Edit7 .Text)/strToFloat(Edit8 .Text))); end;
مثلا 500 كقيمة مستقطعه قسمة 4000 شخص فالناتج هو 0.125

ثم ناخذ 0.125 ونضربها في 4000 شخص ولكن على مجموعات اي 50 سجل تكون الحلقة
كود :
procedure TForm5.BitBtn1Click(Sender: TObject); var sql1, i_not,count_hala:string; begin if (ComboBox3 .Text ='')then exit; if (ComboBox3 .Text <>'')then ProgressBar1 .Visible :=True ; sql1:=''; sql1:='SELECT Count(fard.hala_fard) AS Count_hala_fard'; sql1:=sql1+' FROM fard'; sql1:=sql1+' WHERE (((fard.hala_fard)="م"))'; dm.q_colection.Close; dm.q_colection.SQL.Clear; dm.q_colection.SQL.Add(sql1); dm.q_colection.Open; count_hala:= dm.q_colection.fieldbyname('Count_hala_fard').AsString; sql1:=''; sql1:='SELECT bet.name_bet,bet.id ,Count(fard.hala_fard) AS Count_hala_fard'; sql1:=sql1+' FROM bet INNER JOIN fard ON bet.id = fard.id'; sql1:=sql1+' WHERE (((fard.hala_fard)="م")) '; sql1:=sql1+' GROUP BY bet.name_bet,bet.id'; dm.q_colection.Close; dm.q_colection.SQL.Clear; dm.q_colection.SQL.Add(sql1); dm.q_colection.Open; IF Edit3 .Text <>'' then if not dm .hesbat .Locate('it',edit3.Text ,[])then Begin with dm do begin nots.Locate ('note',ComboBox3 .Text,[loPartialKey]); i_not:= notsit.AsString; q_colection.First; while not q_colection.Eof do Begin ProgressBar1 .Position :=1; hesbat.Append; hesbatit.AsString:=i_not; hesbatid.AsString:=q_colection.Fieldbyname('id').AsString; hesbatno_fard.AsString:=q_colection.fieldbyname('Count_hala_fard').AsString; hesbaton_sahm.Value:=strToFloat(Edit9 .Text); hesbatno_sum.Value:=q_colection.fieldbyname('Count_hala_fard').Value*strToFloat(Edit9 .Text); hesbatdate .Value :=DateTimePicker1.Date ; hesbatkolea .Value :=(hesbatno_sum .Value )+(hesbatno_duon .Value )-(hesbatalmdfoa .Value ); hesbat.Post; ProgressBar1 .Position :=100; q_colection.Next; end;// end while end;// end with ComboBox3 .Text :=''; Edit8 .Text :=''; Edit9 .Text :=''; Edit7 .Text :=''; Edit3 .Text :=''; ProgressBar1 .Visible :=False ; ShowMessage('تمت اضافة الملاحظة على جميع البيوت'); end else ShowMessage('تم اضافة هده الملاحظة مسبقاً'); ComboBox3 .Text :=''; Edit8 .Text :=''; Edit9 .Text :=''; Edit7 .Text :=''; Edit3 .Text :=''; ProgressBar1 .Visible :=False ; end;
ولكن عند جمع حاصل الضرب يخرج لي المبلغ ناقص او زايد
اي 500 تخرج 400 وكسور او 500 وكسور
فكيف اجعلها تخرج مظبوطة
السلام عليكم النمط Float ليس لديه القدرة على التقريب جرب استخدام StrToCurr/Currency/AsCurrency بدلا من ذلك و رد لنا الخبر
شكرا لك على الاهتمام
ولكن قد جربت ذلك ولم ينج الامر
فانا عند عرض التقرير تخرج لي القيمة اما بزيادة كسر او نقص كسر
وما ارغبه تخرج لي القيمة صحيحة