C# 我怎样才能使;点“;及;逗号;两个字符在文本框中以相同的方式运行而不给出错误?

C# 我怎样才能使;点“;及;逗号;两个字符在文本框中以相同的方式运行而不给出错误?,c#,C#,我想让“.”和“.”都作为十进制数。我的问题是,在我的计算机上,默认情况下它是“.”(23.33工作),当我尝试放置“,”(23,33)时,它会出错。我怎样才能使它工作 private static Double SolveExpression(String expression) { char uiSep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator[0]; expression = exp

我想让“.”和“.”都作为十进制数。我的问题是,在我的计算机上,默认情况下它是“.”(23.33工作),当我尝试放置“,”(23,33)时,它会出错。我怎样才能使它工作

private static Double SolveExpression(String expression)
{
    char uiSep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator[0];
    expression = expression.Replace('.', uiSep);
    expression = expression.Replace(',', uiSep);
    if (expression.StartsWith("("))
    {
        int opening_brackets = 1, closing_brackets = 0, current_symbol = 1;
        while (opening_brackets != closing_brackets)
        {
            if (expression[current_symbol] == '(')
                opening_brackets++;
            else if (expression[current_symbol] == ')')
                closing_brackets++;

            current_symbol++;
        }
        String expr = expression.Substring(1, current_symbol - 2);
        expression = expression.Remove(0, current_symbol);

        Match operation = Regex.Match(expression, @"^[\+\-\*\/]");
        if (operation.Success)
        {
            expression = expression.Remove(0, operation.Value.Length);
            switch (operation.Value)
            {
                case "+":
                    {
                        return SolveExpression(expr) + SolveExpression(expression);
                    }
                case "-":
                    {
                        return SolveExpression(expr) - SolveExpression(expression);
                    }
                case "*":
                    {
                        return SolveExpression(expr) * SolveExpression(expression);
                    }
                case "/":
                    {
                        return SolveExpression(expr) / SolveExpression(expression);
                    }
            }
        }
        else
            return SolveExpression(expr);
    }

    Match constant = Regex.Match(expression, @"(^-*\d+)((\.|\,)(\d+))?");
    if (constant.Success)
    {
        expression = expression.Remove(0, constant.Value.Length);

        Match operation = Regex.Match(expression, @"^[\+\-\*\/]");
        if (operation.Success)
        {
            expression = expression.Remove(0, operation.Value.Length);
            switch (operation.Value)
            {
                case "+":
                    {
                        return Double.Parse(constant.Value) + SolveExpression(expression);
                    }
                case "-":
                    {
                        return Double.Parse(constant.Value) - SolveExpression(expression);
                    }
                case "*":
                    {
                        return Double.Parse(constant.Value) * SolveExpression(expression);
                    }
                case "/":
                    {
                        return Double.Parse(constant.Value) / SolveExpression(expression);
                    }
            }
        }
        else
            return Double.Parse(constant.Value);
    }
    else
        //throw new Exception("Invalid Expression");
        MessageBox.Show("You have entered invalid expression! Revise and try again", "Something went wrong", MessageBoxButtons.OK,MessageBoxIcon.Error);

    return 0;
}

没有完全理解你的意思。但这里有一些东西可以帮助您使用字符串的数字格式:

double [] value = {123.456,567.1};
Console.WriteLine("Your account balance is {0:C2}.", value[0],value[1]);
Console.WriteLine("Your account balance is {1:C3}.", value[0],value[1]);
// Displays "Your account balance is $123.46."
        //  "Your account balance is $567.100."
其中:0和1是值数组、值[0]和值的元素。 C2和C3以货币格式显示,小数点后有两位和三位数字


有关详细信息和更多信息,请查看如果您希望支持任一字符作为小数点,但不接受数千个分隔符,那么最简单的方法就是将所有
替换为
,并使用
CultureInfo.InvariantCulture

stringValue = stringValue.Replace(',','.');
double.TryParse(stringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out double doubleValue)

但是,如果用户提供的值带有千位分隔符(带或不带小数),则此方法将给出错误的结果。

使用以下行中的正则表达式:

\-?[0-9]+[\.\,][0-9]+
这将允许以下形式的数字:

  • 12.34
  • 12,34
  • -12.34
  • -12,34
然后使用
字符串。替换

可以这样做:

input = input.Replace(",", ".")
var numberFormat = System.Globalization.CultureInfo.InvariantCulture.NumberFormat;
double value = Convert.ToDouble(TextBox.Text, numberFormat);
可以解析该数字。

尝试以下操作:

var str = "1.25";
var str2 = "1,25";

double Parse(string txt){
    return double.Parse(txt.Replace(",",".")
                           .Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));
}

Parse(str); // not crashing
Parse(str2); // not crashing

你能定义一下它不工作吗。文本框是HTML(web应用程序)还是WInforms、WPF或其他技术?那么
123456
代表什么值呢?123.456怎么样?