powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Некорректное отображение отрицательных bigint
15 сообщений из 15, страница 1 из 1
Некорректное отображение отрицательных bigint
    #39254103
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39255412
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, засада... Похоже, что FormatFloat в пятой дельфи не умеет форматировать целые с количеством разрядов больше 18.
Пока непонятно, как исправлять.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39255801
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Нарыл где-то в старых завалах - должна работать. Использование:

S:=PrintUsingEx('###,###,###,###,###.########',123456677.1234,',','.')

Код: 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.
Function PrintUsingEx(Mask:AnsiString; Number:extended; CommaCh,PointCh:AnsiChar):AnsiString;
VAR  FldWidth,IntLen,i,j,places,PointPos:INTEGER;
     UseComma,IsDec,negative:boolean;
     OutS,IntS:AnsiString;
begin
  negative:=number<0; Number:=abs(Number);
  places:=0; FLdWidth:=length(Mask);
  UseComma:=pos(CommaCh,Mask)>0; IsDec:=pos(PointCh,Mask)>0;
  if IsDec then
     BEGIN
        PointPos:=pos(PointCh,Mask);
        places:=FldWidth-PointPos;
     END;
  str(number:0:places,OutS);  
  if UseComma then
    BEGIN
     j:=0;
     IntS:=copy(OutS,1,length(OutS)-places);
     IntLen:=length(IntS);
     if IsDec then IntLen:=IntLen -1;
     for i:=IntLen downto 2 do
       begin inc(j); if (j mod 3)=0 then insert(CommaCh,OutS,i); end;
    END;
  if length(OutS)<FLdWidth then
     OutS:=spaces(FLdWidth-length(OutS))+OutS;    // это просто добавляет строку пробелов вперед
  if (negative) then OutS:='-'+OutS;
  Result:=OutS;
end;
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39255844
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Тут кстати весь фокус в этой строке:

Код: pascal
1.
 str(number:0:places,OutS);



без всякого FormatFloat() и т.п.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39255857
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

И тут есть еще маленькая засада (на Д2010 проверял):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
I:int64;
I:=High(Int64);
Str(I:0:20,S);   // даст 9223372036854775807  что правильно

N:extended;
N:=I;
Str(N:0:20,S);  // даст 9223372036854775810.0  <-- т.е. использовать для отображения "протаскивание" через extended - чревато.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39256408
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ключевые слова "в пятой дельфи", там функция форматирования на асме написана.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39256449
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Ну так этот код как бы еще не со времен турбовижина живет и ему пофигу на чем там в 5-й дельфе функция форматирования написана - ему главное, чтобы Str() был.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39256480
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterему главное, чтобы Str() был.

Не понял, причем тут Str вообще? Она ничего волшебного с целыми не делает.
Проблема в том, что строка форматирования задается пользователем, и может быть любой. Править нужно потрохи FloatToText или полностью писать свою замену оной и заменять ее вызовы везде, где она дергается. А она много где в VCL/эксперте дергается.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39256488
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

А, вот ты о чем, понял. Я как бы намекал на замену FloatToText() своим аналогом... Хотя насколько это геморрно я только в общих чертах представляю.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39305589
Здравствуйте!
Что-то делается или пока недосукг?
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39305668
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сдвигАтель Что-то делается

Нет.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39319342
IBExpert,

Лаконично. А вообще планируется?
(Я, конечно, понимаю, что количество людей, просматривающих в эксперте значения
bigint полей стремится к 0, но все-таки продукт коммерческий для не WIN1251...)
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39319419
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сдвигАтельЛаконично. А вообще планируется?
(Я, конечно, понимаю, что количество людей, просматривающих в эксперте значения
bigint полей стремится к 0, но все-таки продукт коммерческий для не WIN1251...)

И чего? В коммерческом продукте в принципе не должно быть багов? :)
Надо быть реалистом: если баг напрягает полтора пользователя, то тратить кучу времени на его исправление попросту нет смысла. А как его исправить, не тратя на это кучу времени - я не знаю.
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39319455
IBExpertИ чего? В коммерческом продукте в принципе не должно быть багов? :)Не, я вот о чем: раз уж он есть, то может как-то сообщать тем пользователям, которые прут на него не зная?
Ну типа варнинг выдавать или хотя бы где-нибудь в доке отразить?
...
Рейтинг: 0 / 0
Некорректное отображение отрицательных bigint
    #39321166
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сдвигАтельНе, я вот о чем: раз уж он есть, то может как-то сообщать тем пользователям, которые прут на него не зная?
Ну типа варнинг выдавать или хотя бы где-нибудь в доке отразить?

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


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