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+?
.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..";"..
Если тип 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 символов. Мне приходится изварачиваться и делать номер сделки из даты, времени и микросекунд (или милисекунд).
Если версия Квика 7, то там lua 5.1. А вот с ним уже не все так очевидно. Он, действительно, может не переварить номер из 19 символов. Поэтому, собственно, и был переход на lua 5.3. https://forum.quik.ru/forum10/topic5119/ Поэтому обновляйте версию.