powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / wsprintf для форматирования double
25 сообщений из 25, страница 1 из 1
wsprintf для форматирования double
    #40114208
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не подходит?
Код: pascal
1.
2.
3.
var buffer: array[0..20] of Char;
wsprintf(buffer, '%0.4f', 12.33339);
MessageBox(0, buffer, '', MB_OK);


Показывает просто "f". Как тогда можно получить строку с отформатированным double до 4-х знаков после запятой? Без использования модуля System.SysUtils (для Format)/
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114226
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
Как тогда можно получить строку с отформатированным double до 4-х знаков после запятой? Без использования модуля System.SysUtils (для Format)/
Никак. wsprintf не умеет работать с floating point
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114228
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
wsprintf не умеет работать с floating point
Зато с ним работают StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114230
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
а в каком модуле они описаны? В Winapi.Windows нет.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114234
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing
_Vasilisk_,
а в каком модуле они описаны? В Winapi.Windows нет.

Да ладно. В Windows.pas (D2007) точно есть.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114238
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
а в каком модуле они описаны? В Winapi.Windows нет.
Посмотрел детальнее - это не апишные, а библиотечные функции.

Так что придется преодолевать Ваше отвращение перед SysUtils.Format
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114241
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нууу...если там принципиально без SysUtils - всегда можно написать свой велосипед. ;)
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114282
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
Нууу...если там принципиально без SysUtils - всегда можно написать свой велосипед. ;)

Да как-то все велосипеды не едут на х64. Может у кого есть рабочий? :)
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114285
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing,

А ты ручками, типа for, round, Ord, Chr и т.п.:)
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114288
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing
...Может у кого есть рабочий? :)


SysUtils.Format() - ?
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114297
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
SysUtils.Format() - ?

В первом же посте написано, что без SysUtils. Ну требования такие, не моя хотелка :(
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114302
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing,

а тупо реализацию выдрать?
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114303
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самый примитив...
Str(Trunc(Num))+'.'+Str(Frac(Num)*10000)
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114309
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
LiYing,

а тупо реализацию выдрать?

Там все через Compiler Magic.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114344
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreat
ъъъъъ
LiYing,

а тупо реализацию выдрать?

Там все через Compiler Magic.


можно выдрать из Dephi 7, например
там ещё не было этой грязи
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114347
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

там ассемблер.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114351
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ъъъъъ
defecator,

там ассемблер.


Посмотрел сейчас - и впрямь ассемблер

Ну тогда из дельфи xe7 - выкусить только ветку PUREPASCAL

в любом случае - работа творческая )))
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114356
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
Ну тогда из дельфи xe7 - выкусить только ветку PUREPASCAL

Выкусите? :) У меня только 10.4, нет xe7.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114360
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing
defecator
Ну тогда из дельфи xe7 - выкусить только ветку PUREPASCAL

Выкусите? :) У меня только 10.4, нет xe7.

И что, нет версии без ассемблера? Не верю.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114365
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
И что, нет версии без ассемблера? Не верю.

Не знаю, сейчас не могу посмотреть, т.к. студия на работе да и пишут про хе7... только завтра.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114367
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
LiYing
ъъъъъ
И что, нет версии без ассемблера? Не верю.

Не знаю, сейчас не могу посмотреть, т.к. студия на работе да и пишут про хе7... только завтра.


Странный какой-то программист
На компе дома Дельфи нет....Поколение тиктокеров ?
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114369
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
Странный какой-то программист
На компе дома Дельфи нет....Поколение тиктокеров ?

Ага, тиктокер, 1961 г.р.)) Хватает чем заниматься дома, окромя Дельфи.
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114408
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
ъъъъъ
SysUtils.Format() - ?

В первом же посте написано, что без SysUtils. Ну требования такие, не моя хотелка :(
А как обосновали идиотские требования?
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114428
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal
Самый примитив...
Str(Trunc(Num))+'.'+Str(Frac(Num)*10000)

В принципе, данное решение (с мелкими изменениями) устраивает. Всем спасибо!
...
Рейтинг: 0 / 0
wsprintf для форматирования double
    #40114693
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing, не помню тестировал ли, но помню что было оч давно )
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
unit CrtLib;
interface

 function Dbl2Str(lf:Double):string;
 function Dbl2Sta(lf:Double):AnsiString;
 function Dbl2StrN(Lf:Double;pr:Cardinal = 3):string;
 function Dbl2StaN(lf:Double;pr:Cardinal = 3):AnsiString;
 function Str2Dbl(const wStr :String):Double;     overload;
 function Str2Dbl(const aStr :AnsiString):Double; overload;

 function sprintf (S: PAnsiChar; const Format: PAnsiChar): Integer; cdecl; varargs;
 function swprintf(S: PChar;     const Format: PChar)    : Integer; cdecl; varargs;
 function strtod(s :PAnsiChar ; endptr:PPAnsiChar): double; cdecl;
 function wcstod(s :PChar ; endptr:PPChar): double; cdecl;

implementation

const
 msvcrt = 'msvcrt.dll';

 function sprintf (S: PAnsiChar; const Format: PAnsiChar): Integer; cdecl; varargs; external msvcrt;
 function swprintf(S: PChar;     const Format: PChar)    : Integer; cdecl; varargs; external msvcrt;
 function strtod(s :PAnsiChar ; endptr:PPAnsiChar): Double; cdecl; external msvcrt;
 function wcstod(s :PChar ; endptr:PPChar): Double; cdecl; external msvcrt;

function Dbl2Str(lf:Double):string;
const cFmt = UnicodeString('%lg');
var   Buff:array [0..1023] of Char;
begin
 SetString(Result,Buff,swprintf(Buff, cFmt, Lf));
end;

function Dbl2StrN(Lf:Double;pr:Cardinal):string;
const
 cFmt = UnicodeString('%.*lf');
var
 Buff:array [0..1023] of Char;
begin
 SetString(Result,Buff,swprintf(Buff, cFmt, pr, Lf));
end;

function Dbl2Sta(Lf:Double):AnsiString;
const
 cFmt = AnsiString('%lg');
var
 Buff:array [0..1023] of AnsiChar;
begin
 SetString(Result,Buff,sprintf(Buff, cFmt, Lf));
end;

function Dbl2StaN(Lf:Double;pr:Cardinal):AnsiString;
const cFmt = AnsiString('%.*lf');
var   Buff:array [0..1023] of AnsiChar;
begin
 SetString(Result,Buff,sprintf(Buff, cFmt, pr, Lf));
end;

function Str2Dbl(const wStr :String):Double;
var
 eP : PChar;
begin
 Result := wcstod(PChar(wStr),@eP);
end;

function Str2Dbl(const aStr :AnsiString):Double;
var
 eP : PAnsiChar;
begin
 Result := strtod(PAnsiChar(aStr),@eP);
end;

end.

...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / wsprintf для форматирования double
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]