Как распечатать двойное с запятой

Пользовательская конфигурация является довольно удобной вещью, и часто приложения заканчиваются со спросом на растяжимое решение.

Для.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

10
задан NomeN 27 January 2016 в 21:59
поделиться

4 ответа

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>(',')));
12
ответ дан 3 December 2019 в 20:43
поделиться

Это контролируется локалью вашей программы.

То, как вы устанавливаете языковой стандарт программы по умолчанию, зависит от платформы. На платформах типа POSIX это, например, переменные среды LANG и LC_ *.

Вы можете задать конкретный языковой стандарт - отличный от стандартного - в программе на C ++, вызвав ios :: imbue. Что-то вроде этого может сработать:

#include <locale>
cout.imbue(std::locale("German_germany"));

Идея состоит в том, чтобы принудительно установить локаль, где запятая является десятичным разделителем. Возможно, вам потребуется настроить строку «German_germany», чтобы добиться желаемого поведения на вашей конкретной платформе.

2
ответ дан 3 December 2019 в 20:43
поделиться

Вам нужно ввести в поток другую локаль, ту, чей фасет num_punct (iirc) указывает запятую.

Если языковой стандарт вашей платформы форматируется запятыми, тогда

cout.imbue(locale(""));

должно быть достаточно .

3
ответ дан 3 December 2019 в 20:43
поделиться

Если быть точным, это контролируется значением std :: numpunct :: decimal_point () . Вы можете imbue () другой языковой стандарт с другим decimal_point ()

1
ответ дан 3 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: