Пользовательская конфигурация является довольно удобной вещью, и часто приложения заканчиваются со спросом на растяжимое решение.
Для.NET 1.1 отошлите статью http://aspnet.4guysfromrolla.com/articles/020707-1.aspx
Примечание: вышеупомянутое решение работает на.NET 2.0 также.
Для.NET 2,0 определенных решения, отошлите статью http://aspnet.4guysfromrolla.com/articles/032807-1.aspx
imbue () cout
с локалью
, чья функция-член decimal_point ()
фасета numpunct
возвращает запятую.
Получить такую локаль
можно несколькими способами. Вы можете использовать именованный языковой стандарт, доступный в вашей системе ( std :: locale ("fr")
, возможно). В качестве альтернативы вы можете получить свой собственный numpuct, реализовать в нем член do_decimal_point ()
.
Пример второго подхода:
template<typename CharT>
class DecimalSeparator : public std::numpunct<CharT>
{
public:
DecimalSeparator(CharT Separator)
: m_Separator(Separator)
{}
protected:
CharT do_decimal_point()const
{
return m_Separator;
}
private:
CharT m_Separator;
};
Используется как:
std::cout.imbue(std::locale(std::cout.getloc(), new DecimalSeparator<char>(',')));
Это контролируется локалью вашей программы.
То, как вы устанавливаете языковой стандарт программы по умолчанию, зависит от платформы. На платформах типа POSIX это, например, переменные среды LANG и LC_ *.
Вы можете задать конкретный языковой стандарт - отличный от стандартного - в программе на C ++, вызвав ios :: imbue. Что-то вроде этого может сработать:
#include <locale>
cout.imbue(std::locale("German_germany"));
Идея состоит в том, чтобы принудительно установить локаль, где запятая является десятичным разделителем. Возможно, вам потребуется настроить строку «German_germany», чтобы добиться желаемого поведения на вашей конкретной платформе.
Вам нужно ввести в поток другую локаль, ту, чей фасет num_punct (iirc) указывает запятую.
Если языковой стандарт вашей платформы форматируется запятыми, тогда
cout.imbue(locale(""));
должно быть достаточно .
Если быть точным, это контролируется значением std :: numpunct
. Вы можете imbue ()
другой языковой стандарт с другим decimal_point ()