none
c# ta int ile virgullu sayıları toplamıyor double de topluyor ama sql e virgul yokmuş gibi kaydediyor RRS feed

  • Soru

  • double ile ;
                nakit = Convert.ToDouble(textBox1.Text);
                digergelir = Convert.ToDouble(textBox2.Text);
                mac = Convert.ToDouble(textBox3.Text);
                posvirman = Convert.ToDouble(textBox20.Text);
                banka1 = Convert.ToDouble(textBox4.Text);
                banka2 = Convert.ToDouble(textBox5.Text);
                banka3 = Convert.ToDouble(textBox6.Text);
                maas = Convert.ToDouble(textBox7.Text);
                gunun = Convert.ToDouble(textBox8.Text);
                topciro = nakit + digergelir + mac + banka1 + banka2 + banka3 + maas + gunun;
                textBox9.Text = topciro+"";
                topciro = Convert.ToDouble(textBox9.Text);
                adisyon = Convert.ToDouble(textBox10.Text);
                saglama = topciro - adisyon;
                textBox11.Text = saglama+"";
                saglama = Convert.ToDouble(textBox11.Text);
                masaadet = Convert.ToDouble(textBox12.Text);
                masabası = topciro / masaadet;
                masabası = Convert.ToDouble(textBox13.Text);
                textBox13.Text = masabası+"";

    bu şekilde hesaplamayı yapıyorum ama kaydetme işlemine gelince virgülleri sql e kaydederken virgülsüz kaydediyor kaydetme kodlarıda assagıdaki gibidir;


                    komut = new SqlCommand("INSERT INTO gunsonugirdi (tarih,nakit,diger,mac,virman,virmanyeri,banka1,banka2,banka3,maas,gungider,ciro,adisyon,masa,masabasi,fark) VALUES (@tar,@nakit,@diger,@mac,@virman,@virmanyeri,@banka1,@banka2,@banka3,@maas,@gungider,@ciro,@adisyon,@masa,@masabasi,@fark)", baglan);
                    komut.Parameters.Add("@tar", SqlDbType.Date).Value = dateTimePicker1.Value;
                    komut.Parameters.AddWithValue("@nakit", textBox1.Text);
                    komut.Parameters.AddWithValue("@diger", textBox2.Text);
                    komut.Parameters.AddWithValue("@mac", textBox3.Text);
                    komut.Parameters.AddWithValue("@virman", textBox20.Text);
                    komut.Parameters.AddWithValue("@virmanyeri", comboBox3.Text);
                    komut.Parameters.AddWithValue("@banka1", textBox4.Text);
                    komut.Parameters.AddWithValue("@banka2", textBox5.Text);
                    komut.Parameters.AddWithValue("@banka3", textBox6.Text);
                    komut.Parameters.AddWithValue("@maas", textBox7.Text);
                    komut.Parameters.AddWithValue("@gungider", textBox8.Text);
                    komut.Parameters.AddWithValue("@ciro", textBox9.Text);
                    komut.Parameters.AddWithValue("@adisyon", textBox10.Text);
                    komut.Parameters.AddWithValue("@masa", textBox12.Text);
                    komut.Parameters.AddWithValue("@masabasi", textBox13.Text);
                    komut.Parameters.AddWithValue("@fark", textBox11.Text);
                    baglan.Open();
                    komut.ExecuteNonQuery();
                    baglan.Close();

    şimdi ben ne yapmalıyım ki virgüllü sayıları hem hesaplayayım hemde sql veritabanına aynı sekilde kayıt olmasını saglayayım;

    17 Mart 2019 Pazar 12:00

Yanıtlar

  • integer c# ta tam sayı demektir. Eğer siz 2,4 sayısını bir integer değişkene atarsanız sayı değeri 2 olacaktır.

    Yine c# da para ile alakalı bir veriniz varsa decimal kullanmalısınız , virgüllü diğer ifadeler için double/float tercih edilebilir.

    Ve decimal değerlerde nokta ve virgülün kullanımı önemlidir bazı ülkelerde binlik gösterim virgül ile iken bazılarında nokta ile olabiliyor.Bu yüzden bu konuya da dikkat edin.SQL de money tipini görebilirsiniz.

    Aslında soru pek anlaşılmıyor ama şöyle genel bir cevap oldu bu herhalde.

    17 Mart 2019 Pazar 12:38
  • komut.Parameters.AddWithValue("@banka1", textBox4.Text);

    ifadelelerinin yerine,

    komut.Parameters.AddWithValue("@banka1", Convert.ToDouble(textBox4.Text, CultureInfo.InvariantCulture));

    yazın.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    17 Mart 2019 Pazar 13:38

Tüm Yanıtlar

  • integer c# ta tam sayı demektir. Eğer siz 2,4 sayısını bir integer değişkene atarsanız sayı değeri 2 olacaktır.

    Yine c# da para ile alakalı bir veriniz varsa decimal kullanmalısınız , virgüllü diğer ifadeler için double/float tercih edilebilir.

    Ve decimal değerlerde nokta ve virgülün kullanımı önemlidir bazı ülkelerde binlik gösterim virgül ile iken bazılarında nokta ile olabiliyor.Bu yüzden bu konuya da dikkat edin.SQL de money tipini görebilirsiniz.

    Aslında soru pek anlaşılmıyor ama şöyle genel bir cevap oldu bu herhalde.

    17 Mart 2019 Pazar 12:38
  • komut.Parameters.AddWithValue("@banka1", textBox4.Text);

    ifadelelerinin yerine,

    komut.Parameters.AddWithValue("@banka1", Convert.ToDouble(textBox4.Text, CultureInfo.InvariantCulture));

    yazın.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    17 Mart 2019 Pazar 13:38
  • teşekür ederim
    17 Mart 2019 Pazar 13:39
  • Virgülün sayıda ne işi var?

    Yukarıda hep .Text var yani string.

    Virgüllü dediğin:

    1,000,000

    gibi bir sayı mı?

    Yoksa:

    1,15 gibi 1 tam yüzde 15 anlamındaki sayı mı?

    Kodunda Türkçe CultureInfo yok. CultureInfo belirtilmedikçe,  virgül sadece binlik ayraçtır. Decimal ayraç noktadır.

    Normalde senin yapman gereken .Text için  Convert yerine TryParse kullanmak ve CultureInfo belirtmek (parayla ilgili olduğuna göre de, double değil decimal kullanmak):

    bool _nakit = decimal.TryParse(textBox1.Text, NumberStyles.Currency, new CultureInfo("tr-TR"), out decimal nakit);
    
     

    Eğer textBox1.Text'e yazılan decimala çevirilebiliyorsa sonuç true olacaktır (kontrol etmekte fayda var).

    17 Mart 2019 Pazar 21:51
    Yanıtlayıcı