2017-09-26 100 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,因为它是专为货币计算而设计的。