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

Convert a string in a label to int not working properly

我有以下代码:

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 中输入 50000wll 是一个 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();

注意这一点:

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

声明 50double

此外,由于您的 b 可能有 non-integer 的结果,您可能也想更改此行:

int p = Convert.ToInt32(b); //same issue losing precision

进入

double p = Convert.ToDouble(b); //use double instead

我能看到的主要内容之一是您在代码中使用了

int p = Convert.ToInt32(b);

这将使 p = 51 而不是 51.1

如果您将 p 设为双精度,然后转换为双精度,您的代码应该可以正常工作

double p = Convert.ToDouble(b)

首先,您要将 b 转换为 int。所以你失去了 0.5 的精度,变成了 51,而不是 51.5。将您的 p 更改为 double,不要转换 b!这会给你 sq 作为 0,985。然后你打印出 g,而不是 sq。这就是程序显示 1,492,而不是 0,985:

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