Как вывести число формата “__int64” с пробелами на разряды C++

354
09 мая 2017, 06:13
__int64 TotalNumberOfBytes;
BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx(
    L"c:\\",                      // directory name
    NULL,     // bytes available to caller
    (PULARGE_INTEGER)&TotalNumberOfBytes,     // bytes on disk
    NULL  // free bytes on disk
);
if (GetDiskFreeSpaceFlag != 0)
{
    printf("\n\rОбщий объем: %I64d ( %I64d Mb )", TotalNumberOfBytes, TotalNumberOfBytes / 1024 / 1000);
}
else    printf("Отсутствует (GetDiskFreeSpace)");

Выводит:

Общий объем: 249464614912 ( 243617 Mb )

Я хочу сделать:

Общий объем: 249 464 614 912 ( 243617 Mb )

Хочу что бы выводилось с пробелами между разрядами, т.к. там выводятся большие числа, для удобства хочу что бы выводилось поразрядно. Как такое сделать?
Написано, что нужно использовать именно этот __int64 (64-бита) тип для работы с такими большими числами.

Answer 1

Можно сконфигурировать numpunct.thousands_sep:

#include <cstdint>
#include <iostream>
#include <locale>
struct space_out : std::numpunct<char> {
    char do_thousands_sep()   const { return ' '; }  // separate with spaces
    std::string do_grouping() const { return "\3"; } // groups of 3 digit
};
int main()
{
  uint64_t u = 249464614912;
  std::cout << "default locale: " << u << '\n';
  std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
  std::cout << "locale with modified numpunct: " << u << '\n';
}

Пример:

$ c++ -std=c++11 *.cc && ./a.out
default locale: 249464614912
locale with modified numpunct: 249 464 614 912
READ ALSO
Мусор в конце строки после присваивания

Мусор в конце строки после присваивания

Пытаюсь разбить файл на 20 частей посимвольноПервый массив Pack - это массив, в котором копируется текст с определенного символа, чтобы в дальнейшем...

240
Вывод массива с помощью рекурсии

Вывод массива с помощью рекурсии

Необходимо вывести элементы массива в обратном порядке, при этом передать в функцию последний индекс массиваЧто я делаю не так? Вот мой код...

1058
CreateProcess() параметры командной строки

CreateProcess() параметры командной строки

Как сделать так, чтобы при создании нового процесса, с помощью CreateProcess(), в него передать char* argv[]

280
Не могу получит ключ с QMap

Не могу получит ключ с QMap

Сравниваю containce в QMap показывает ключ есть:

256