En iyi yanıtlayıcılar
c# ta int ile virgullu sayıları toplamıyor double de topluyor ama sql e virgul yokmuş gibi kaydediyor

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;
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.
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 19 Mart 2019 Salı 10:05
-
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...
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 19 Mart 2019 Salı 10:05
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.
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 19 Mart 2019 Salı 10:05
-
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...
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 19 Mart 2019 Salı 10:05
-
-
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).