Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

преобраз. вещ.число->строка фикс.длины

284
07 января 2006 года
michael_is_98
587 / / 25.02.2005
скажите, есть ли в Си++ функция, которая записывает вещ.число в строку длины n символов (не больше). sprintf не помогает
292
07 января 2006 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by michael_is_98
скажите, есть ли в Си++ функция, которая записывает вещ.число в строку длины n символов (не больше). sprintf не помогает



_fcvt - Converts a floating-point number to a string.

398
07 января 2006 года
Alexandoros
630 / / 21.10.2005
swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
); - для юникода


HRESULT StringCbPrintf( LPTSTR pszDest,
size_t cbDest,
LPCTSTR pszFormat,
...
); - под виндувс, я только их и юзаю (семейство StringCb...)
2.4K
08 января 2006 года
dinasok51
219 / / 12.11.2005
А Format из СString не подойдет?

Напр:
 
Код:
CString sMyString;
double  dMyDouble = 123.45678;

sMyString.Format("%020.13f", dMyDouble);
Выдаст столько сколько закажешь
"000123.4567800000000"
284
11 января 2006 года
michael_is_98
587 / / 25.02.2005
Format, sprintf, swprintf - одно и тоже. И не работает. Поле width если его задать дает лишь минимальное значение вывода, если больше нужно места для записи числа, оно расширяется.
StringCbPrintf - откуда это?
fcvt, gcvt,ecvt - не помогают, в документации по gcvt сказано, что параметр задает число цифр, а не максимальную ширину поля ввода (в которое могут входить "плюс", "минус").
Поэтому видимо в точности такого варианта в Си нет. А вот в Дельфи есть - параметр функция str задает максимальную ширину поля вывода.
2.4K
11 января 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by michael_is_98
Format, sprintf, swprintf - одно и тоже. И не работает. Поле width если его задать дает лишь минимальное значение вывода, если больше нужно места для записи числа, оно расширяется.


Это правильно, но в док-ции есть продолжение: параметр precision

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

sMyString.Format("%020.13f", dMyDouble); всегда
даст 20 символов, если abs(dMyDouble)<100000

398
11 января 2006 года
Alexandoros
630 / / 21.10.2005
swprintf - не совсем sprintf. size_t count - максимальная длина строки. Дальше все просто обрубится, так же как и в StringCbPrintf() -виндовая ф-ция из библиотеки strsafe.lib .
284
12 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by Alexandoros
swprintf - не совсем sprintf. size_t count - максимальная длина строки. Дальше все просто обрубится, так же как и в StringCbPrintf() -виндовая ф-ция из библиотеки strsafe.lib .


Похоже в новом VS2003 добавили функции scprintf и snprintf для этой цели. Но в VC 5.0 их точно не было.
swprintf в VC 5.0 не имел параметра count
и не было StringCbPrintf.
Странно, все это ухудшает переносимость.

284
12 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by dinasok51
Это правильно, но в док-ции есть продолжение: параметр precision

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

sMyString.Format("%020.13f", dMyDouble); всегда
даст 20 символов, если abs(dMyDouble)<100000


В том то и дело, что не знаю, на скольки символах можно разместить число типа double. По меньшей мере 22 символа.

2.4K
12 января 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by michael_is_98
Странно, все это ухудшает переносимость.

Я бы употребил термин совместимость. Но с этим все ОК. Написанное для VS 5(6) как правило работает и под .NET ( с поправкой на ошибки версии и мелкие разночтения стандарта ), но, естественно, не наоборот.

Цитата:

В том то и дело, что не знаю, на скольки символах можно разместить число типа double. По меньшей мере 22 символа.

Трудно представить такие величины. Ты что измеряешь кол-во атомов в мировом океане? IMHO дело не в абстрактном double, а в диапазоне твоих величин и разумной точности их отбражения

284
13 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by dinasok51
Я бы употребил термин совместимость. Но с этим все ОК. Написанное для VS 5(6) как правило работает и под .NET ( с поправкой на ошибки версии и мелкие разночтения стандарта ), но, естественно, не наоборот.


Есть еще UNIX-системы. В них использ. такие же функции.

2.4K
13 января 2006 года
dinasok51
219 / / 12.11.2005
Microsoft меньше всего заботься о совместимости своих платформам, сред разработки и исполнения с чужими. И мало интересуется переносимостью программ.
324
16 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by michael_is_98
В том то и дело, что не знаю, на скольки символах можно разместить число типа double. По меньшей мере 22 символа.



1(знак) + 1(целая часть) + 1(е) + 1(знак мантиссы) + 17(мантисса) = 21

284
17 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by AndreySar
1(знак) + 1(целая часть) + 1(е) + 1(знак мантиссы) + 17(мантисса) = 21


Но кроме формы записи с экспонентой может присутствовать обычная запись вещ. числа. Под мантиссу (степень 10) отводится 3 символа+знак мантиссы.
Кроме того, нужно учесть, что есть символ ".".

324
17 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by AndreySar
1(знак) + 1(целая часть) + 1(е) + 1(знак мантиссы) + 17(мантисса) = 21



Вернее будет так:
1(знак) + 1(точка) + 17(мантисса) + 1(е) + 1(знак степени) + 3 (показатель степени) = 24 - при научной записи числа

284
17 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by AndreySar
Вернее будет так:
1(знак) + 1(точка) + 17(мантисса) + 1(е) + 1(знак степени) + 3 (показатель степени) = 24 - при научной записи числа



Точно не уверен, но мантисса должна быть меньше. 10 или 16.

И перед точкой идет число - при научной записи числа всегда 1.

324
18 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by michael_is_98
Точно не уверен, но мантисса должна быть меньше. 10 или 16.

И перед точкой идет число - при научной записи числа всегда 1.



Согласен - забыл число, но не всегда 1.
3.243423e-21

284
18 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by AndreySar
Согласен - забыл число, но не всегда 1.
3.243423e-21


хорошо, в итоге имеем 25.
Хотя лучше действительно уйти от жесткого задания длины цифр в программе.

284
18 января 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by dinasok51
Microsoft меньше всего заботься о совместимости своих платформам, сред разработки и исполнения с чужими. И мало интересуется переносимостью программ.


Но ведь есть ANSI стандарт.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог