将标签中的字符串转换为 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();
}
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();
注意这一点:
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
可能有 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();
我有以下代码:
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();
注意这一点:
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
可能有 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();