如何为计算器完成数字分组。例如,数字分组编号与Windows 7计算器的编号方式相同

时间:2011-04-10 21:57:44

标签: c# silverlight windows-phone-7

我正在为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而且我不知道为什么。任何帮助将受到高度赞赏。提前谢谢。

1 个答案:

答案 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.AllowLeadingSignNumberStyles.AllowDecimalPoint等)的组合。

无需手动删除逗号等!

有关详细信息,请参阅MSDN