Matematiksel işlem

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

Matematiksel işlem

Mesaj gönderen memoli79 »

Merhaba arkadaşlar;
Matematiksel işlemlerle ilgili bir problemim var.
Access databasem var.
Boy,Kilo,ve sonuc alanlarım var db de.

Boy ve kilo alanları:sayı tipinde
sonuc ise sayı ama ondalıklı sayı tipinde.

yapmak istediğim olay

sonuc:kilo/boy^2 işlemini yaptırmak ve sonuc kısmında işlemin virgülden sonra sadece 1 veya 2 hanesini görmek istiyorum.(28,3) gibi.


konuyla ilgili yardımcı olursanız çok sevinirm.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Acess deki karşılığı nedir bilmiyorum ama
MSSQL de bu şekildeki bir durumda

Kod: Tümünü seç

sonuc= round(kilo/boy^,2) 
ile çıkan sonucu yuvarlayarak yazarız.
Miktar ve fiyat çarpımı sonucu, Çıkan Tutarın yuvarlanması gibi.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

Matematiksel işlem

Mesaj gönderen memoli79 »

Arkadaşlar soruma ceap alamadım.Kendim uğraşıyorum fakat halledemedim.
Yardımlarınızı bekliyorum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Cevap yukarıda yazılmış. Yapamadığın sayının karesini almak ise kendisi ile çarpman sayının zaten karesini verecektir. Round(sayi,2) ise o sayının 2 ondalıklı halini verir. Tabi bu SQL kodlamayla olur. Round'u kullanmak gerekirse

Kod: Tümünü seç

select Round((Boy*Boy)/(Kilo*Kilo),2) as Oran,* from TabloAdi
gibi bir sorgu sana istediğini verecektir. Yok eğer delphi kodu ile yapmak istiyorsan 2 ondalıklı sayı elde etmenin en pratik yollarından birisi sayıyı 100'e çarpıp bölmektir.

Kod: Tümünü seç

Sayi:=Boy/Kilo;
Oran:=Round(Sayi*100)/100;
gibi bir kod işine yarar. Aslında bu gibi dört işlemden ibaret çözümler çok zor olmasa gerek.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

Matematiksel işlem

Mesaj gönderen memoli79 »

Arkadaşlar Merhaba;

Yukarıdaki sorumiçin ben şöyle bir kod kullandım.

var
carp,sonuc2,sonuc:Extended;
sonuc1,kilo:Longint;
boy:Real;
a:integer;
begin
boy:=strtofloat(Eboy.Text);
kilo:=strtoint(Ekilo.Text);
a:=10;
carp:=(boy*boy);
sonuc:=(kilo/carp)*a;
Sonuc1:=Trunc(sonuc);
sonuc2:=sonuc1/a;
Ebmi.Text:=Floattostr(sonuc2);

bu kod ile database kayıt işlemi sırasında access database'i sıfırlayıp yeniden kayıt girince ilk kayıt işleminde sorun çıkartmadan kayıt ekliyor hesaplamarıda istediğim gibi yapıyor.

Fakat ikinci kez kayıt girmeye çalıştığım zaman
project1.exe raised exception class econverterror with message "' is not a valid floating point value hatasını alıyorum.

Formumda formülasyonu iptal edip normal manuel olarak dbedit alanlarıma kayıt girdiğimde ise herhangi bir hata vermiyor.

Text alanlarım db edittir.

Access Database de Eboy ve Ebmi db editim sayı ve ondalıklı sayı formatında

Ekilo ise uzuntamsayı formatında tanımlıdır.

Ebmi alanımı formül de hasaplatıp database kayıt ettiriyorum.

Ebmi alınına sadece virgülden sonra 1 basamak alacak şekilde yapıyorum.
örnek:28,3 gibi.

Takıldım kaldım.

Yardımlarınızı bekliyorum.

Herkese iyi çalışmalar.
SAHAN33
Üye
Mesajlar: 36
Kayıt: 24 Eki 2006 04:34

Mesaj gönderen SAHAN33 »

neden pos komutuyla veri içerisinden , karakterini aratıp kaçıncı sırada ise sonrasindaki iki karakteri almıyorsun Şöyleki

Kod: Tümünü seç

var
a:integer;
B:string;
Begin
 A:=Pos(',',Sayı_Degeri);
 if A<>0 Then
  Begin
   B:=Copy(Sayi_Degeri,1,A+2);// virgülden sonra iki karakter
   Showmessage(B);
  End;
End;
Gerekli dönüşümleri yaparsın artık..
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

Matematiksel işlem

Mesaj gönderen memoli79 »

cevap yazan herkese teşekkür ederim.
Problemi butonun click olayına aşağıdaki kodları yazzarak çözdüm.

İyi çalışmalar.

var

boy,carp,carps,carp1:extended;
kilo,a,carp2: integer;
kilos, boys,carp4,carp3 :String;

begin
a:=10;
boys:=Eboy.Text;
boy:=strtofloat(boys);
kilos:=Ekilo.Text;
kilo:=strtoint(kilos);
carp:=(kilo/(boy*boy));
carp1:=carp*a;
carp2:=trunc(carp1);
carps:=strtoint(inttostr(carp2));
carp3:=floattostr(carps/a);

carp4:=floattostr(strtofloat(carp3));
Ebmi.Text:=carp4;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Bu basit işlem için bu kadar değişken kullanmaya ve belleği meşgul etmeye gerek duydunuz anlayamadım.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla