Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > parse дробных чисел и региональные настройки


Автор: RokDemon 20.1.2012, 01:37
Нужна помощь.
1)Меня интересует, как правильно сделать так, чтобы пользователь, не зная текущих региональных настроек вводил дробные числа в поле ввода ,
а система затем правильно "понимала" величину этих чисел не зависимости от того ввел он к примеру "3.14" или "3,14" и дальше уже оперировала данными.
я сделал так:
Код

using System;
using System.Globalization;

namespace test_doubleParse
{
    class Program
    {
        static void Main(string[] args)
        {
            NumberFormatInfo nfi = NumberFormatInfo.CurrentInfo;
            string CurrentDecimalSeparator = nfi.CurrencyDecimalSeparator;
            string str_value = "3,14";
            double d = double.Parse(conversion(str_value,CurrentDecimalSeparator));
            Console.WriteLine(d  +  "\t\t\tВсе в порядке!");
            Console.ReadLine();
        }

        /// <summary>
        /// автоматическое преобразование чисел с любым разделителем("." или ",") в текущую для системы
        /// </summary>
        /// <param name="str1">входная строка</param>
        /// <param name="str2">разделитель в текущих региональных настройках</param>
        /// <returns></returns>
        static string conversion(string str1, string str2) {
            
            if (str1.Contains(".") && (str2 != "."))
                return  str1.Replace('.', ',');
            if (str1.Contains(",") && (str2 != ","))
                return str1.Replace(',', '.');
            return str1;
        }
    }
}



что скажете?
2)как решается этот вопрос в реальных крупных приложениях, например финансового плана, где требуется вводить дробную информацию ? 

Автор: diadiavova 20.1.2012, 10:40
Цитата(RokDemon @  20.1.2012,  02:37 Найти цитируемый пост)
как решается этот вопрос в реальных крупных приложениях, например финансового плана, где требуется вводить дробную информацию ?  

В реальных приложениях принимается какой-то один метод ввода, а элементы управления проверяют корректность введенных данных. В крайнем случае, при некорректном вводе данные могут быть исправлены так, чтобы пользователь видел какие  изменения были внесены, а в случае, если неясно как именно надо исправлять, пользователь должен получать уведомление об ошибке ввода. В американской системе запятая используется как разделитель триплексов, так что запись 1,024 там означает 1024, а не то, что у нас, так что делать такой "универсальный" код явно не стоит. В крайнем случае сделай такую опцию в настройках приложения и пусть пользователь сам выбирает как ему вводить числа.
А вообще для ввода чисел лучше использовать элемент управления, специально для этой цели заточенный, то есть NumericUpDown.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)