Таблица сделок, номер заявки превращается в число e+

Страницы: 1
RSS
Таблица сделок, номер заявки превращается в число e+
 
Читаю таблицу сделок:
Код
local tradelist = {};
      for i = 0,getNumberOf("trades") - 1 do
      
         tradelist[i] = "" ..
                     getItem("trades",i).datetime.day.."."..getItem("trades",i).datetime.month.."."..getItem("trades",i).datetime.year..";"..
                     getItem("trades",i).datetime.hour..":"..getItem("trades",i).datetime.min..":"..getItem("trades",i).datetime.sec..";"..
                     tonumber(string.format("%0.17g", getItem("trades",i).trade_num))..";"..
                     tonumber(getItem("trades",i).order_num)..";"..
                     tonumber(getItem("trades",i).trans_id)..";"..
                     getItem("trades",i).sec_code..";"..
                     getItem("trades",i).brokerref..";"..
                     getItem("trades",i).price..";"..
                     getItem("trades",i).qty..";";
         
Но при попытке получить номер заявки (order_num, trade_num) - длинное число (19 символов) превращается в число вида 1.2929169375034e+018
Как можно получить обычный номер заявки без e+?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Вместо string.format() используйте tostring(), чтобы не портилось 19-значное целое число.
 
Цитата
_sk_ написал:
tostring
У меня это не дает результата - все равно на конце: e+018
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
print(strig.format("%d",1234567890123456789))
--> 1234567890123456789
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Иван написал:
Цитата
_sk_ написал:
tostring
 У меня это не дает результата - все равно на конце:  e+018
Вместо tostring используйте:
Код
local function toStringInt (value)
   return tostring (math.tointeger (value) or value)
end
 
Цитата
s_mike@rambler.ru написал:
print(strig.format("%d",1234567890123456789))
--> 1234567890123456789
Если нужно преобразовать плавающее число (1234567890123456789.), а не целое, то сначала math.tointeger
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
strig.format("%d",1234567890123456789))
Не выводит то, что нужно - выводит "-2147483648"


math.tointeger - не поддерживает такую функцию?...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Выводит....  (скриншшот)
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Иван написал:
Не выводит то, что нужно - выводит "-2147483648"
   Вы какую версию QUIK используете?
  Задавая вопрсы надо обязательно указывать версию.
 
.trade_num,  .order_num, .trans_id - они уже при получении из таблицы сделок имеют формат NUMBER. Не понятно зачем число форматировать в число.
string.format("%0.17g",... - здесь вы сами пытаетесь преобразовать число в строку в формате %e или %f в зависимости от того что короче. И спрашиваете как от этого уйти. Просто не надо этого делать.
Судя по тому, что в конце Вы все таки хотите получить длинную строку(tradelist[i]) из полученных данных, логичнее через string.format преобразовать числа в удобный для вас вид (как и предлагает s_mike@rambler.ru,
 
Что бы избежать возможных проблем с преобразованием , я бы написал.      
tradelist[i] = "" ..
                    getItem("trades",i).datetime.day.."."..getItem("trades",i).datetime.month.."."..getItem("trades",i).datetime.year..";"..
                    getItem("trades",i).datetime.hour..":"..getItem("trades",i).datetime.min..":"..getItem("trades",i).datetime.sec..";"..

                    string.format("%d", getItem("trades",i).trade_num)..";"..
                    string.format("%d",getItem("trades",i).order_num)..";"..
                    string.format("%d",getItem("trades",i).trans_id)..";"..

                    getItem("trades",i).sec_code..";"..
                    getItem("trades",i).brokerref..";"..
 
Если тип number и предположительно целое, то достаточно такой конструкции
Код
if type(x) == "number" and (math.floor(x) == x) then
        return _VERSION == "Lua 5.1" and string.format("%0.16g", x) or tostring(math.tointeger(x) or x)
end

Что же касается получения данных из таблиц Квика, то вызов getItem необходимо свести к минимуму. Один вызов на индекс и запомнить в переменной. Иначе большой расход памяти.
 
У меня все равно это не заработало.
Версия квика 7. Я пытаюсь получить номер сделки из таблицы "Все сделки". Там 19 символов.
Мне приходится изварачиваться и делать номер сделки из даты, времени и микросекунд (или милисекунд).
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Если версия Квика 7, то там lua 5.1. А вот с ним уже не все так очевидно. Он, действительно, может не переварить номер из 19 символов. Поэтому, собственно, и был переход на lua 5.3. https://forum.quik.ru/forum10/topic5119/
Поэтому обновляйте версию.
Страницы: 1
Читают тему
Наверх