如果找到运算符,如何轻松解析文本框以执行计算
本文关键字:文本 计算 执行 何轻松 运算符 如果 | 更新日期: 2023-09-27 18:08:22
作为会计助理,我的部分工作要求我为发票上的各种项目分配费用组。例如,如果一家办公用品公司给我们寄来一些商品,我可能不得不把复印纸和笔分开,并把它们分别归类到不同的费用组。
将费用组中的金额划分为总运费和税收金额是一项繁琐的操作,但我决定通过编写一个程序来更聪明地工作,该程序可以根据输入:items[], shipping, tax来为我调整金额。这真是太神奇了,真的减少了我做这些任务所需的时间。
然而,我想实现一个excel风格的功能,我可以在文本框中有+和-操作符,这将允许我很容易地在一行中添加类似的项目。(例如,笔、尖笔、记事本,它们都在发票上的单独行上,都需要计算并作为一个金额返回。)
我目前正在使用txtValue.Text
并将其转换为double来执行计算。我希望能够解析该文本值并评估输入的语句。如果我能看一眼发票,输入16.49+22.38+47.06
,并知道当我点击计算按钮时一切都会好起来,那么这将节省我在计算器上把它们加在一起的时间,例如。
我曾经在Excel的VBA中写过这个,它本身允许这样做,但它感觉不如我自定义的东西好。
string value = "1.2+5.3-1";
char[] delimiters = new char[] { '+', '-' };
string[] parts = value.Split(delimiters);
string[] signs = Regex.Split(value, "[0-9]|''.");
这将给你一个数字数组(你需要将它们转换为double)和一个符号数组(也会有一些空元素,你应该忽略它们。
只需遍历它们并使用开关进行实际的数学运算。
有几种方法可以解决这个问题。这是我想出的一个粗略的解决方案。可能还有很多更优雅的方法。
public double Parse(string input)
{
char lastoperator = '0';
double result = 0;
for (int i = 0; i < input.Length; i++)
{
string temp = "";
if (char.IsDigit(input[i]) || input[i] == '.')
temp += input[i];
else if(input[i] == '+' || input[i] == '-')
{
double val;
if(double.TryParse(temp, out val))
{
if(lastoperator == '+')
result += val;
else if(lastoperator == '-')
result -= val;
else
result = val;
lastoperator = input[i];
temp = "";
}
//else error
}
else
continue;
}
return result;
}
希望对你有帮助。