作为一名会计助理,我的部分工作要求我将费用组分配到发票上的各种项目。例如,如果一家办公用品公司给我们寄来一些商品,我可能必须将复印纸和笔分开,并将它们编码到单独的费用组中。
将like费用组中的金额划分为总运费和税额是一项繁琐的操作,但我决定通过编写一个程序来更智能地工作,该程序将根据以下输入为我调整金额: items[]、运费和税收。这就像一个护身符,真的减少了我做这些工作所需的时间。
但是,我想实现一个Excel风格的功能,这样我就可以在文本框中使用+和-运算符,这样我就可以轻松地在一行中添加类似的项。(例如,钢笔、锐器、记事本,它们都在发票上的单独行上,都需要计算并作为一笔金额返回。)
我目前正在使用txtValue.Text并将其转换为双精度,以执行计算。我希望能够解析该文本值并计算输入的语句。例如,如果我可以看一眼发票并输入16.49+22.38+47.06,并且知道当我点击calculate按钮时一切都会好起来,那么这将节省我在计算器上将它们相加的时间。
我用VBA for Excel写过一次这篇文章,它本身就允许这样做,但感觉就是不像我自己定制的东西那么好。
发布于 2013-04-10 22:52:19
string value = "1.2+5.3-1";
char[] delimiters = new char[] { '+', '-' };
string[] parts = value.Split(delimiters);
string[] signs = Regex.Split(value, "[0-9]|\\.");这将给你一个数字数组(你需要将它们转换成双精度)和一个符号数组(也会有一些空元素,你应该忽略它们。
只需迭代它们,并使用开关进行实际的数学运算。
发布于 2013-04-10 22:45:05
有几种方法可以解决这个问题。这是我想出来的一个粗略的解决方案。可能有十几种更优雅的方法来实现它。
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;
}希望这能有所帮助。
https://stackoverflow.com/questions/15928666
复制相似问题