Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Некорректное отображение отрицательных bigint / 15 сообщений из 15, страница 1 из 1
10.06.2016, 11:23
    #39254103
Некорректное отображение отрицательных bigint
...
Рейтинг: 0 / 0
14.06.2016, 05:33
    #39255412
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Некорректное отображение отрицательных bigint
Да, засада... Похоже, что FormatFloat в пятой дельфи не умеет форматировать целые с количеством разрядов больше 18.
Пока непонятно, как исправлять.
...
Рейтинг: 0 / 0
14.06.2016, 15:17
    #39255801
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Некорректное отображение отрицательных bigint
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
14.06.2016, 16:08
    #39255844
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Некорректное отображение отрицательных bigint
IBExpert,

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

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



без всякого FormatFloat() и т.п.
...
Рейтинг: 0 / 0
14.06.2016, 16:25
    #39255857
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Некорректное отображение отрицательных bigint
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
15.06.2016, 15:07
    #39256408
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Некорректное отображение отрицательных bigint
Ключевые слова "в пятой дельфи", там функция форматирования на асме написана.
...
Рейтинг: 0 / 0
15.06.2016, 15:58
    #39256449
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Некорректное отображение отрицательных bigint
IBExpert,

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

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

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

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

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

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

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


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