привести 18630138 к 18 _ 630 _ 138
От: out  
Дата: 07.09.04 10:20
Оценка:
Народ подскажите как привести стороку к желаемому виду?

Строка размер выделеных файлов, хотелось что бы было более читабельно и разделять мегабайты килобайты пробелами.
Re: привести 18630138 к 18 _ 630 _ 138
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 07.09.04 10:37
Оценка:
Здравствуйте, out, Вы писали:

out>Народ подскажите как привести стороку к желаемому виду?


out>Строка размер выделеных файлов, хотелось что бы было более читабельно и разделять мегабайты килобайты пробелами.


Кусок из моего проекта:

void CFilesList::SeparateThousands(CString& strNumber)
{
    USES_CONVERSION;

    if (!strNumber.IsEmpty()) {
        struct lconv* pLConv = localeconv();
        TCHAR chrSep = *A2CT(pLConv->thousands_sep);
        if (chrSep != 0) {
            int iStart = strNumber.Find(*A2CT(pLConv->decimal_point));
            if (iStart < 0) {
                iStart = strNumber.GetLength();
            }
            int iStop = strNumber[0] == *A2CT(pLConv->negative_sign) ||
                strNumber[0] == *A2CT(pLConv->positive_sign) ? 1 : 0;
            while ((iStart -= *pLConv->grouping) > iStop) {
                strNumber.Insert(iStart, chrSep);
            }
        }
    }
}
- Искренне ваш, Поросенок Пафнутий
Re[2]: привести 18630138 к 18 _ 630 _ 138
От: Malokhatko  
Дата: 08.09.04 08:23
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

out>>Народ подскажите как привести стороку к желаемому виду?


SDB>
SDB>void CFilesList::SeparateThousands(CString& strNumber)
SDB>{
SDB>    if (!strNumber.IsEmpty()) {
SDB>                strNumber[0] == *A2CT(pLConv->positive_sign) ? 1 : 0;
SDB>            while ((iStart -= *pLConv->grouping) > iStop) {
SDB>                strNumber.Insert(iStart, chrSep);
SDB>


Извращенцы

DWORD Size = 18630138;
DWORD MB = Size / 1000000;          // или чисто в Мегабайтах 1048576
DWORD KB = (Size % 1000000) / 1000; // или чисто в КБ 1024
DWORD B = Size % 1000;              // или чисто в Байтах 1024

Дальше CString::Format поможет
Re[3]: привести 18630138 к 18 _ 630 _ 138
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 08.09.04 08:37
Оценка: :)
Здравствуйте, Malokhatko, Вы писали:

M>Извращенцы


А локаль Ваш вариант учитывает?
- Искренне ваш, Поросенок Пафнутий
Re[4]: привести 18630138 к 18 _ 630 _ 138
От: Malokhatko  
Дата: 08.09.04 09:06
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>А локаль Ваш вариант учитывает?


Да, Ваш вариант безусловно хорош, но если бы шла реч об оптимизации, то работа со строками все же менее предпочтительна чем оперирование с целыми числами.
Re[4]: привести 18630138 к 18 _ 630 _ 138
От: ioni Россия  
Дата: 08.09.04 09:06
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, Malokhatko, Вы писали:


SDB>А локаль Ваш вариант учитывает?


так автор про локаль не спрашивал ему нужно разделять пробелами число
Re[3]: привести 18630138 к 18 _ 630 _ 138
От: out  
Дата: 08.09.04 09:14
Оценка:
Здравствуйте, Malokhatko, Вы писали:


M>Извращенцы


M>
M>DWORD Size = 18630138;
M>DWORD MB = Size / 1000000;          // или чисто в Мегабайтах 1048576
M>DWORD KB = (Size % 1000000) / 1000; // или чисто в КБ 1024
M>DWORD B = Size % 1000;              // или чисто в Байтах 1024

M>Дальше CString::Format поможет
M>


Спасибо, я так собственно и сделал =) после долгих мучений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.