我有以下代码:
int a = Int32.Parse(weight.Text);
double b = 0;
if (this.wcf.SelectedItem == weighing)
{
b = (a * 1.03) / 1000;
wll.Content = b.ToString();
}
weight
是TextBox
的名称,在此TextBox
中输入的内容为50000
。 wll
是Label
,其中显示了b
的计算。 wll
显示51.5
这是正确的。
我想在进一步计算中使用b
的值,因此我定义了一个新的int
:
int p = Convert.ToInt32(b);
double g = 0;
double sq = Math.Sqrt(50 / p);
sq的值应为0,985
,并显示在标签daf
中,但程序会显示1,492
。这里有些不对劲,有人可以帮助我吗?
g = (1.09 + (0.41 * sq));
daf.Content = g.ToString();
答案 0 :(得分:1)
要注意这一点:
int p = Convert.ToInt32(b);
double g = 0;
double sq = Math.Sqrt(50 / p); //int/int
这会让你Math.Sqrt(int)
失去精确度。相反,你应该这样做:
double sq = Math.Sqrt(50D / p); //double/int
或
double sq = Math.Sqrt((double)50 / p); //double/int
或
double sq = Math.Sqrt(50.0 / p); //double/int
将50
声明为double
此外,由于您的b
可能会产生非整数结果,您可能也希望更改此行:
int p = Convert.ToInt32(b); //same issue losing precision
到
double p = Convert.ToDouble(b); //use double instead
答案 1 :(得分:0)
我能看到的主要内容之一就是在您的代码中使用了
int p = Convert.ToInt32(b);
这将使p = 51而不是51.1
如果将p设为double,并且转换为double
,则代码应该可以正常工作double p = Convert.ToDouble(b)
答案 2 :(得分:0)
首先,您要将b
转换为int
。所以你失去了0.5精度,变成了51,而不是51.5。将您的p
更改为double
,不要转换b
!这将sq
为0,985
。然后您打印出g
,而不是sq
。这就是该计划展示1,492
而非0,985
:
daf.Content = sq.ToString();