将标签中的字符串转换为int无法正常工作

时间:2016-01-28 11:43:40

标签: c# int32

我有以下代码:

int a = Int32.Parse(weight.Text);
double b = 0;

if (this.wcf.SelectedItem == weighing)
{
    b = (a * 1.03) / 1000;
    wll.Content = b.ToString();
}

weightTextBox的名称,在此TextBox中输入的内容为50000wllLabel,其中显示了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();

3 个答案:

答案 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!这将sq0,985。然后您打印出g,而不是sq。这就是该计划展示1,492而非0,985

的原因
daf.Content = sq.ToString();