Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / wsprintf для форматирования double / 25 сообщений из 25, страница 1 из 1
23.11.2021, 15:52
    #40114208
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wsprintf для форматирования double
Не подходит?
Код: 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
23.11.2021, 16:53
    #40114226
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wsprintf для форматирования double
LiYing
Как тогда можно получить строку с отформатированным double до 4-х знаков после запятой? Без использования модуля System.SysUtils (для Format)/
Никак. wsprintf не умеет работать с floating point
...
Рейтинг: 0 / 0
23.11.2021, 16:55
    #40114228
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wsprintf для форматирования double
_Vasilisk_
wsprintf не умеет работать с floating point
Зато с ним работают StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx.
...
Рейтинг: 0 / 0
23.11.2021, 17:00
    #40114230
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wsprintf для форматирования double
_Vasilisk_,
а в каком модуле они описаны? В Winapi.Windows нет.
...
Рейтинг: 0 / 0
23.11.2021, 17:07
    #40114234
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wsprintf для форматирования double
LiYing
_Vasilisk_,
а в каком модуле они описаны? В Winapi.Windows нет.

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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


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

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

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

В принципе, данное решение (с мелкими изменениями) устраивает. Всем спасибо!
...
Рейтинг: 0 / 0
24.11.2021, 20:57
    #40114693
Bred eFeM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wsprintf для форматирования double
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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / wsprintf для форматирования double / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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