Преобразование чисел в форматированные строки и повторный анализ форматированной строки

В Visual C ++ мне нужно отформатировать числа в соответствии с текущим языковым стандартом потока, используя числовой формат окон, например, используя разделители цифр и десятичную точку окон, а также снова анализировать их, как C # .NET.

convert double b = 108457000.89 to "108,457,000.89"also convert "108,457,000.89" to double b = 108457000.89

эта статья была настолько полезна при преобразовании числа в форматированную строку http://www.codeproject.com/Articles/14952/A-simple-class-for-converting-numbers-into-a-strin

но как отменить операцию, которая не была ясна, я хочу знать, как это сделать ??

1

Решение

Вы можете сделать это так (и игнорировать эту статью):

#include <iomanip>
#include <iostream>
#include <sstream>

int main() {

// Environment
std::cout << "Global Locale: " << std::locale().name() << std::endl;
std::cout << "System Locale: " << std::locale("").name() << std::endl;

// Set the global locale (To ensure it is English in this example,
// it is not "")
std::locale::global(std::locale("en_GB.utf8"));
std::cout << "Global Locale: " << std::locale().name() << std::endl;

// Conversion string to double
std::istringstream s("108,457,000.89");
double d = 0;
s >> d;
// Conversion double to string
std::cout << std::fixed << d << std::endl;
// This stream (initialized before main) has the "C" locale,
// set it to the current global:
std::locale c = std::cout.imbue(std::locale());
std::cout << "Locale changed from " << c.name()
<< " to " << std::cout.getloc().name() << std::endl;
std::cout << std::fixed << d << std::endl;

return 0;
}

Замечания:

  • Запустите его в терминале / консоли (Моя среда разработки Eclipse имеет
    С языком)
  • Возможно, вам придется настроить «en_GB.utf8»

Результат:

Global Locale: C
System Locale: en_US.UTF-8
Global Locale: en_GB.utf8
108457000.890000
Locale changed from C to en_GB.utf8
108,457,000.890000

Предупреждение:

Libraries may rely on the global local being the "C" local.
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]