我希望得到像 30.769 这样的小数点,但在这种情况下我只得到 30。我试图将我的 int myVar 更改为双倍 myVar,但出现错误。 我做了一些研究,但到目前为止还不能做对。我知道我在这里进行了更改:
int myVar= (int)ttl_Res.ExecuteScalar();
还有这里:
COUNT(DDL_ANS)*100/@myVar
但这是我当前的代码:
if (TYPE.SelectedValue == "sometype")
{
con.Open();
int myVar= (int)ttl_Res.ExecuteScalar();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Update SETS set SCORE = x.Result from (select ID, Type, COUNT(DDL_ANS)*100/@myVar AS Result from JATG) as x where ID = 1211";
cmd.Parameters.Add("@myVar", SqlDbType.VarChar).Value = myVar;
cmd.Connection = con;
//con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
COUNT(DDL_ANS)*100/@myVar
返回int
的原因是因为所有三个操作数(COUNT(DDL_ANS)
、100
和@myVar
)都是int
。要得到一个decimal
的结果,将一个操作数转换为decimal
就足够了,例如COUNT(DDL_ANS)*CONVERT(DECIMAL,100)/@myVar
。
Convert.ToDouble将其显式转换为双精度。错误可能是由于溢出,但这取决于整数是什么。
您必须改用Decimal
。
var myVar= (Decimal) ttl_Res.ExecuteScalar(); // Assuming your first column in the first row your query contains a value with decimal points