Баг с выводом времени в таблицу QLua

Страницы: 1
RSS
Баг с выводом времени в таблицу QLua
 
Код
t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);

SetCell(t_id, Rows, 0, t);
Вместо 10:00 выводит 10:0. Как-то можно это исправить?
 
Дмитрий,

Все правильно, число 0 при преобразовании в строку дает "0"
И это не баг.
Иначе 10 было бы "100" и тогда да это уже был бы баг.


Если нужно "00" то преобразуйте явно с добавлением "0" через условие, если длина строки равна 1 символу,
или через функцию string.format("%02d", alltrade.datetime.min)
 
Цитата
Дмитрий написал:
Код
  t  =  tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min);

 SetCell (t_id, Rows,  0 , t);  
Вместо 10:00 выводит 10:0. Как-то можно это исправить?
Пишите
Код
t = string.format("%02d:%02d", alltrade.datetime.hour, alltrade.datetime.hour)
 
Код
t = string.format("%02d:%02d", alltrade.datetime.hour, alltrade.datetime.min)
Опечатка была.
 
работает только на 00, дальше нет (скриншот)
 
Цитата
_sk_ написал:
Код
  t  =   string.format ( "%02d:%02d" , alltrade.datetime.hour, alltrade.datetime.min)  
Опечатка была.
тоже работает криво: 17:59 не отобразилось, 18:00 да сработало, а после первой минуты всё осталось по-прежнему
интересно а почему не работает преобразование в минуты?
Код
t  =   string.format ( "%М" , alltrade.datetime.min)

Пробовал добавить ноль через условие, но код вызывает ошибку
Код
If string.len(alltrade.datetime.min)=2 then
t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);
Else
t = tostring(alltrade.datetime.hour)..":0"..tostring(alltrade.datetime.min);
end
 
Код
If string.len(alltrade.datetime.min)=2 then
If string.len(alltrade.datetime.min) == 2 then
 
Цитата
Дмитрий написал:
t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);
local h = alltrade.datetime.hour;   if h<10 then h="0"..h end
local m=alltrade.datetime.min;   if m<10 then m="0"..m end
local t=h..":"..m
 
Цитата
Игорь Б написал:
Код
   If   string.len (alltrade.datetime.min) =  2   then   
If string.len(alltrade.datetime.min) == 2 then
что-то ей не понравилось второе равно
 
 
Дмитрий, могу лишь предложить свой работающий вариант, от которого можно оттолкнуться.
Код
if string.len(Tl.hour) == 1 then Tl.hour = "0"..Tl.hour; end;
            if string.len(Tl.min) == 1 then Tl.min = "0"..Tl.min; end;
               if string.len(Tl.sec) == 1 then Tl.sec = "0"..Tl.sec; end;
Его же Вам предлагал Sergey Gorokhov.
 
Цитата
Игорь Б написал:
Дмитрий, могу лишь предложить свой работающий вариант, от которого можно оттолкнуться.
Код
   if   string.len (Tl.hour)  =  =   1   then  Tl.hour  =   "0"  .. Tl.hour;  end ;
             if   string.len (Tl.min)  =  =   1   then  Tl.min  =   "0"  .. Tl.min;  end ;
                if   string.len (Tl.sec)  =  =   1   then  Tl.sec  =   "0"  .. Tl.sec;  end ;  
Его же Вам предлагал Sergey Gorokhov
спасибо, всё получилось
 
Цитата
Дмитрий написал:
Цитата
Игорь Б написал:
Дмитрий , могу лишь предложить свой работающий вариант, от которого можно оттолкнуться.  
Код
      if    string.len (Tl.hour)   =    =     1     then   Tl.hour   =     "0"    ..  Tl.hour;   end  ;
              if    string.len (Tl.min)   =    =     1     then   Tl.min   =     "0"    ..  Tl.min;   end  ;
                 if    string.len (Tl.sec)   =    =     1     then   Tl.sec   =     "0"    ..  Tl.sec;   end  ;    
 Его же Вам предлагал  Sergey Gorokhov
спасибо, всё получилось
Это просто ужас какой-то.
-----------------------------------
У вас изначально  таблица Ti содержит  время в формате чисел.
----------------------------
Вы их превращаете для сравнения в строки,
а потом записываете в виде строк в таблицу
----------------------
В итоге у вас для отображения времени в виде строки 6 раз вызывается преобразование числа в строку
а потом вы еще и уничтожаете числа в таблице Ti, заменяя их строками
----------------------
Куча операций и дополнительной памяти чтобы вывести на экран строчку.
----------------------
Мазохизм какой-то
Страницы: 1
Читают тему
Наверх