2017-09-26 111 views
0

嘗試計算百分比量,但它總是返回0。錯誤比率計算

的foreach(在dataGridView1.Rows的DataGridViewRow行) { 雙igst_amt;

  double amt = (Convert.ToDouble(row.Cells[dataGridView1.Columns[4].Index].Value)) * (Convert.ToDouble(row.Cells[dataGridView1.Columns[5].Index].Value)); 
      row.Cells[dataGridView1.Columns[6].Index].Value = Convert.ToString(amt); 
      igst_amt = (igst/100)*(amt); 
      MessageBox.Show(Convert.ToString(igst_amt)); 
      if (state == "o") 
      { 
       row.Cells[dataGridView1.Columns[9].Index].Value =Convert.ToString((cgst/100) *(amt)); 
       row.Cells[dataGridView1.Columns[11].Index].Value =Convert.ToString((sgst/100) * (amt)); 
      } 
      else if (state == "i") 
      { 
       row.Cells[dataGridView1.Columns[7].Index].Value = igst_amt; 
      } 
      double g_total = igst_amt + amt; 
      row.Cells[dataGridView1.Columns[13].Index].Value = Convert.ToString(g_total); 
      double t_g_total=0; 
      t_g_total+= g_total; 
     } 
+0

'igst'的類型是什麼? –

+0

數據類型爲雙精度型 double igst = 0; double cgst = 0; double sgst = 0; –

+0

'igst'是否變成非零? –

回答

0

讓我們打破這種下降到重現該問題所需的基本代碼:

int igst = 10; 
double amt = 42; 
double igst_amt = (igst/100) * (amt); 

Console.WriteLine(igst_amt); 

有了這個,我得到的0結果。

但是,如果我把它寫這樣的:

double igst = 10; 
double amt = 42; 
double igst_amt = (igst/100) * (amt); 

Console.WriteLine(igst_amt); 

然後我得到4.2

我懷疑igst實際上是一個整數,你正在執行整數算術,這將導致0

你應該改變igstdouble,或者你可以這樣做:

int igst = 10; 
double amt = 42; 
double igst_amt = igst * amt/100; 

Console.WriteLine(igst_amt); 

一個簡單的改變,以計算和它的作品。另外,作爲一個附註,您似乎在使用double進行貨幣計算,但您應該使用decimal,因爲它是專爲貨幣計算而設計的。