İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Vb.net Çarpma Sorunu..!

SiberWorm22.08.201023 cevap7.917 görüntüleme
2009'den beri508 mesaj
#1
Arkadaşlar sorunum şu;
"miktarla" "fiyatı" çarpıcak "tutara" atıcak işlemi yapıyorum fakat sorun şurada

Örneğin;

Miktara 10,
Fiyata 12,65 Girdiğin Zaman
Tutarı "127 TL" Gösteriyor.
Ama normalde 126,5 Göstermesi Lazım.

(Not:Bu Sorun fiyata 12,65 girince oluyor 12.65 diye girersem sonuc doğru çıkıyor.)

tb_fiyat1.Text = Replace(tb_fiyat1.Text, ",", ".")

Replace Komutu Kullanıyorum Fakat Bu Seferde "," girdiğim zaman imleci değerin başına atıyor bu seferde şöyle oluyor ".12"

Yardımlarınız İçin Şimdiden Teşekkürler..!
Cevaplar
2009'den beri911 mesaj
#2
virgül kullanmamanı önersem
SiberWorm Konuyu açan
2009'den beri508 mesaj
#3
Veri tabanım access

veri tipim sayı

alan boyutunuda ondalık yaptım yine olmadı.Ama sorun oradan değil bence çünkü 12.65 girince doğru çıkıyor 12,65 girersem yanlış çıkıyor.
2005'den beri499 mesaj
#4
fiyat = 12,60
x = formatnumber(fiyat,1) * 10

yukarıdaki gibi yaparsan para birimindeki çarpma sorunun çözülecektir.
2010'den beri250 mesaj
#5
değişken tanımlaman nedir...
SiberWorm Konuyu açan
2009'den beri508 mesaj
#6
tb_tutari1.Text = FormatNumber(tb_fiyati1.Text, 1) * tb_mktr1.Text

Bu şekilde yaptım fakat sorun çözülmedi :(

---------- saat 09:19 eklendi ---------- önceki mesaj saat 09:17 eklenmişti ----------

rainman4009 dedi: ↑
değişken tanımlaman nedir...
Onuda denedim olmadı :(
2008'den beri138 mesaj
#7
belliki küsüratı tek haneye indiriyor ve yuvarlıyor yani 12,65 in 65 kısmını 7 ye tamalıyor ve 12,7 yapıyor daha sonra çarpıyor 127 elde ediyor. nokta yapınca niye yuvarlamıyor bilemiyorum. 12,64 girince 126 lira mı buluyordur acaba?
SiberWorm Konuyu açan
2009'den beri508 mesaj
#8
BeNBeN dedi: ↑
belliki küsüratı tek haneye indiriyor ve yuvarlıyor yani 12,65 in 65 kısmını 7 ye tamalıyor ve 12,7 yapıyor daha sonra çarpıyor 127 elde ediyor. nokta yapınca niye yuvarlamıyor bilemiyorum. 12,64 girince 126 lira mı buluyordur acaba?
Aynen öyle oluyor.

---------- saat 09:33 eklendi ---------- önceki mesaj saat 09:30 eklenmişti ----------

Sorunu bence şöyle çözebiliriz."," girildiği anda virgülü noktaya çevirirse sorun çözülür.
2008'den beri42 mesaj
#9
vb.netci değilim ama
formatnumber(fiyat,2) olarak denerseniz?

yani

tb_tutari1.Text = FormatNumber(tb_fiyati1.Text, 2) * formatnumber( tb_mktr1.Text,2)

bu arada windowsun bölge ve dil ayarklarına bakarsanız ondalık işareti olarak ne tanımlanmış?
2007'den beri6.903 mesaj
#10
Locale sorunu da yaşıyor olabilirsin. VB.Net'te nasıl oluyor bilmiyorum ama locale düzenlemesini Türkçe olacak şekilde yapmayı dene. Veya böyle bir ayarı var mı bilmiyorum varsayılan olarak yukarı yuvarlanacak şekilde de ayarlanmış olabilir. İlgili prosedürün açıklamalarına bakarak da bir sonuca ulaşabilirsin.
SiberWorm Konuyu açan
2009'den beri508 mesaj
#11
Bilgiler için teşekkürler.Şuan başka bir projedeyim müsait olduğumda ona bakıcam çok teşekkürler..!
SiberWorm Konuyu açan
2009'den beri508 mesaj
#12
deaftarzan dedi: ↑
vb.netci değilim ama
formatnumber(fiyat,2) olarak denerseniz?

yani

tb_tutari1.Text = FormatNumber(tb_fiyati1.Text, 2) * formatnumber( tb_mktr1.Text,2)

bu arada windowsun bölge ve dil ayarklarına bakarsanız ondalık işareti olarak ne tanımlanmış?
yok kardeş buda olmadı :(
2007'den beri17 bin mesaj
#13
veri tipi olarak float kullanın. gerçi float c#'da var. sanırım vb.net'deki karşılığı double.
2005'den beri499 mesaj
#14
siberworm dedi: ↑
tb_tutari1.Text = FormatNumber(tb_fiyati1.Text, 1) * tb_mktr1.Text

Bu şekilde yaptım fakat sorun çözülmedi :(
Nasıl olmadı? Ekte dosyayı yolluyorum. Çarpma işlemini rahatlıkla yapıyor.

Ayrıca formatlanmış hallerinide butona bastıktan sonra labellarda çıkarıyorum. dosya ekte.

Ekteki Dosya Görüntüsü:
2005'den beri499 mesaj
#15


        Dim sayi_1, sayi_2
        sayi_1 = TextBox1.Text
        sayi_2 = TextBox2.Text


        If sayi_1 <> "" Or sayi_2 <> "" Then

            If IsNumeric(sayi_1) = False Or IsNumeric(sayi_2) = False Then
                MessageBox.Show("Girdiğiniz Değerler Sayı Değil.")
            Else
                TextBox3.Text = FormatNumber(sayi_1) * FormatNumber(sayi_2)
                Label1.Text = FormatNumber(sayi_1)
                Label2.Text = FormatNumber(sayi_2)
            End If

        Else

            MessageBox.Show("Sayı Alanlarını Boş Bırakamazsınız.")

        End If



Ayrıca kodları da ekliyorum. 3 textbox, 3 label, 1 buton ekle. Button'a üstteki kodu yapıştırman yeterli.

mantık kısaca formatnumber(x,1) virgülden sonraki alan kadar değer gösterir ekranda.

formatnumber(1,123456,1) = 1,1
formatnumber(1,123456,2) = 1,12
formatnumber(1,123456,3) = 1,123

gibi. virgülden sonraki değeri girmezsen eğer normal girilen rakam değerini, girdiğin değeri algılayarak formatlar ve işleme sokar.

Ayrıca diğer formatlarla (x,1), (x,2) nasıl kullanıldığı ve ne sonuç döndürdüğünü öğrenmek için aşağıdaki kaynakları takip edebilirsin.

VBScript FormatNumber Function
ASP Built In Functions
ASP Function FormatNumber

iyi çalışmalar.
SiberWorm Konuyu açan
2009'den beri508 mesaj
#16
Ya kardeş yine olmuyo bendemi sorun var yoksa programdamı anlamadım ya :(

Bakın benim gerçek kodlarım şunlar;

 tb_tutari1.Text = Val(tb_fiyati1.Text * tb_mktr1.Text)
            tutar = Val(tb_fiyati1.Text * tb_mktr1.Text)
            tb_tutari1.Text = Format(tutar, "#,###" + " TL")
2005'den beri499 mesaj
#17
tb_tutari1.Text = formatnumber(tb_fiyati1.Text) * formatnumber(tb_mktr1.Text)
tutar = formatnumber(tb_fiyati1.Text) * formatnumber(tb_mktr1.Text)
tb_tutari1.Text = tutar & "TL"

Dene =)

---------- saat 17:39 eklendi ---------- önceki mesaj saat 17:37 eklenmişti ----------

üstte sana verdiğim kodları inceleyerek prgramına uygularsan olacaktır =)
SiberWorm Konuyu açan
2009'den beri508 mesaj
#18
Tamamdır kardeş oldu fakat

Textbox'ın Textchanged evetine yazınca hata çıkıyor :) Neden olabilir acaba ?

Hatada şu ;

An error occurred creating the form. See Exception.InnerException for details. The error is: Conversion from string "" to type 'Double' is not valid.
2010'den beri947 mesaj
#19
TextChanged'da boş ve string olup olmadığının kontrolünü yapıyor musun? Eğer tüm veri silindiyse ve ya girilen sayı değilse işleme sokmaman gerekir.
2005'den beri499 mesaj
#20
Veri tabanı ile işlem yapıyor musun bu hatayla karşılaşırken?
SiberWorm Konuyu açan
2009'den beri508 mesaj
#21
magnet dedi: ↑
Veri tabanı ile işlem yapıyor musun bu hatayla karşılaşırken?
Yok o anda yapmıyorum ama program veritabanıyla bağlantılı.

Yani program load olduğunda veritabanına bağlanıyor.
2005'den beri499 mesaj
#22
veri tabanı ile bu çarpma işleminin bi alakası varmı? çarptırıp veritabanına falanmı kaydettiriyosun?
kaydettirdiğin alanla ilgili sıkıntı olabilir.
SiberWorm Konuyu açan
2009'den beri508 mesaj
#23
Evet ekledikten(ekleme işleminindede direk ekle diyince veri tabanına kydetmiyor.datagridview'e ekliyor.) sonra kaydet butonuna tıklayıp veri tabanına kaydetmesi lazım.Fakat bana bu hatayı kaydetmeden önce veriyor.
2005'den beri499 mesaj
#24
kodlarını görmem lazım =S
başka diyebileceğim birşey yok=S

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.