所以我正在制作一个在表达式中计算X的程序,例如,如果我输入2*x=6,那么它会说x = 3。我的代码:
string[] exps = textBox1.Text.Split('=');
DataTable dt = new DataTable();
for (int i = 0; i < 50; i++)
{
string s = exps[0].Replace('x', Convert.ToChar(i.ToString())); //<- problem is there
var v = dt.Compute(s, "");
if (int.Parse(v.ToString()) == int.Parse(exps[1]))
{
listBox1.Items.Add("x = " + i);
break;
}
}
但是当 X 超过 9(所以它是两个字符(时我有一个问题,例如 12 或 27,它无法将其转换为字符。你能帮我如何更容易地做到这一点吗?谢谢!
对不起,我的英语不好
您不必使用 Replace(char, char)
重载。还有一个Replace(string, string)
重载:
string s = exps[0].Replace("x", i.ToString());
您可能已经意识到这一点,但是您求解方程的方法仅适用于非常特定的方程。主要是有以下问题:
- 解决方案必须是介于 0 和 49 之间的整数
- 必须只有一个解决方案
- 乘法必须明确标明,即
5x
并不意味着 5 倍 x。 - 右侧必须是整数。这个问题可以通过调用
Compute
exps[1]
(当然使用x
替代品(轻松解决。
而不是字符,只需将其转换为字符串:
exps[0].Replace("x", i.ToString());
您可以创建包含两列的数据表
(1( 使用列名"X",这将保留值和
(2( 将具有表达式的计算列。
示例代码:
var dt=new DataTable();
dt.Columns.Add(new DataColumn("X", typeof(float)));
var exprCol=new DataColumn("Expr");
exprCol.Expression="X+10";
dt.Columns.Add(exprCol);
var row = dt.NewRow();
row["X"] = 5;
dt.Rows.Add(row);
var calculatedValue=row["Expr"];