Как осуществляется группировка цифр для калькулятора. Например, группировка чисел так же, как калькулятор Windows 7 - PullRequest
2 голосов
/ 11 апреля 2011

Я делаю приложение калькулятора для 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 Ответ

1 голос
/ 11 апреля 2011

Вы должны быть знакомы с поддержкой форматирования строки C #, как на входе, так и на выходе.

http://blog.stevex.net/string-formatting-in-csharp/

Используйте Double.TryParse() с одной из перегрузок, которая включает информацию о стиле.

например, TryParse(string s, NumberStyles style, IFormatProvider provider, out double result)

(Должны быть схожие методы для Integer, Decimal, Float и т. Д. В зависимости от требуемой точности).

Этот подход также сделает ваше приложение болееI18N дружественен, так как разные культуры используют разные соглашения для группировки цифр (например, многие европейские культуры делают 1234,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.AllowLeadingSign, NumberStyles.AllowDecimalPoint и т. Д.).

Не нужно вручную убирать запятые и т. Д.!

См. MSDN для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...