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