我正在为Windows Phone 7制作一个计算器应用程序,我正在努力进行数字分组。这是代码:
myNumber = myNumber.Replace(“,”,string.Empty);
int dot = myNumber.IndexOf("0.");
strNumberWithoutDecimals = myNumber.Substring(0, (dot == -1 ? myNumber.Length : dot));
strNumberDecimals = (dot == -1 ? "" : myNumber.Substring(dot));
try
{
strNumberWithoutDecimals = Convert.ToDouble(strNumberWithoutDecimals).ToString("#,##0.000000000");
}
catch (Exception)
{
//Ignore ... for now.
}
total = strNumberWithoutDecimals + strNumberDecimals; return total;
问题是当用户输入说0.323且数字分组打开时,数字不能为负数。它不会起作用。 0.323不能成为-0.323而且我不知道为什么。任何帮助将受到高度赞赏。提前谢谢。
答案 0 :(得分:1)
您应该熟悉输入和输出方面的C#字符串格式化支持。
http://blog.stevex.net/string-formatting-in-csharp/
将Double.TryParse()
与其中一个包含样式信息的重载一起使用。
e.g。 TryParse(string s, NumberStyles style, IFormatProvider provider, out double result)
(根据你需要的精度,应该有类似的Integer,Decimal,Float等方法。)
这种方法也会使你的应用程序更友好,因为不同的文化采用不同的数字分组惯例(例如,许多欧洲文化做1.234.567,89代表1,234,567.89)
TryParse(string s, out double result)
也应该有效,但对输入字符串格式的控制较少。
这些功能相同:
double answer;
var result = Double.TryParse("123,456.78", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.CurrentUICulture, out answer);
Console.WriteLine("result: {0} answer {1}", result, answer);
result = Double.TryParse("123,456.78", out answer);
Console.WriteLine("result: {0} answer {1}", result, answer);
请注意,NumberStyles.Float
是其他NumberStyles(例如NumberStyles.AllowLeadingSign
,NumberStyles.AllowDecimalPoint
等)的组合。
无需手动删除逗号等!
有关详细信息,请参阅MSDN。