getParamEx добавляет 000000 после запятой Quik 8.7.1.3

Страницы: 1
RSS
getParamEx добавляет 000000 после запятой Quik 8.7.1.3
 
Добрый день, коллеги!
Столкнулся с небольшой проблемкой, которую никак не удается решить пока. Короче делаю это:
Код
function main()
    while myScriptWorks == true do   
      currentPrice = getParamEx("SPBFUT", "SiZ0", "last").param_value
      sleep(10)
      message(currentPrice)
      sleep(3000)
   end
end

на выходе получаю это:

76054.000000

Не могу понять, что произошло. Последний раз баловался Qlua еще на 7 Квике и таких проблем не припомню.
Запускал два Квика от разных брокеров, один 8.10, другой 8.7 и везде одно и тоже.
 
Artem, Разбиралось здесь уже. И код утилиты, убирающей концевые нули, не раз приводился.
 
Цитата
Владимир написал:
Artem, Разбиралось здесь уже. И код утилиты, убирающей концевые нули, не раз приводился.
не нашел, поэтому и тему создал. Не могли бы Вы объяснить еще раз что это за явление, если знаете?
 
Artem,
Код
function d0(s)         -- обрезка концевых нулей после запятой
 s=tonumber(s);         -- для числовых переменных
 if s==math.floor(s) then s=math.floor(s);end;
 return tostring(s);      -- возвращаем огрызок
end;            -- конец функции d0()
 
Цитата
Владимир написал:
Artem,  
Код
   function   d0 (s)          -- обрезка концевых нулей после запятой 
 s = tonumber(s);          -- для числовых переменных 
  if  s =  =  math.floor (s)  then  s =  math.floor (s); end ;
  return  tostring(s);       -- возвращаем огрызок 
 end ;             -- конец функции d0() 
  
Спасибо, буду разбираться
 
Владимир, Вы сами пробовали этот код, работает? У меня ничего не поменялось.
вот Ваша функция:
Код
function d0(currentPrice)         -- обрезка концевых нулей после запятой
 currentPrice=tonumber(currentPrice);         -- для числовых переменных
 if currentPrice==math.floor(currentPrice) then 
 currentPrice=math.floor(currentPrice);
 end;
 return tostring(currentPrice);      -- возвращаем огрызок
end;            -- конец функции d0()

function main()
    while myScriptWorks == true do   
      currentPrice = getParamEx("SPBFUT", "SiZ0", "last").param_value
      sleep(10)
      d0(currentPrice)
      message(currentPrice)
      sleep(3000)
   end
end
Я правильно ее использую или может надо еще что-то?
 
И все таки, что это за явление такое с добавление нулей к цене последней сделки? Откуда ноги растут? Может винда виновата, у меня Win7 x64.
Вообще мне нужно просто выставлять заявку, но сервер ее не принимает, потому как лишние 00000 после запятой, там где их не должно быть.
Никто не знает что с этим делать?
 
добавил отбрасывание дробной части, которая у меня раньше (на квике 7) работала без проблем:
Код
local currentPrice
function main()
    while myScriptWorks == true do   
      currentPrice = getParamEx("SPBFUT", "SiZ0", "last").param_value
     sleep(10)     
     currentPrice = tostring(currentPrice - currentPrice % 10)
     message(currentPrice)     
      sleep(3000)
   end
end
Теперь на выходе 76520.0
И ноль этот после запятой ну никак не убирается.

Хорошо бы ребята из техподдержки подтянулись.
 
Artem, Винде это дело глубоко по барабану. :smile:  У меня на этом компе тоже семёрка-64. И у меня, кстати
message (d0("76054.000000"));
даёт строго 76054

Это, скорее всего, такой формат выдачи - что-то типа %1.5f. Нули многих раздражают, включая меня, и именно здесь, на форуме, и было подсказано это решение. Я его завернул в функцию и активно пользуюсь, замечаний не имею. Правда, я не помню, был ли у меня случай, чтобы нули были и справа и слева от точки. Впрочем, проверим... нет, и
message (d0("76520.000000"));
даёт строго 76520.

А на техподдержку не надейтесь - это уж точно не их вопрос.
 
Цитата
Artem написал:
Не могу понять, что произошло. Последний раз баловался Qlua еще на 7 Квике и таких проблем не припомню.
Запускал два Квика от разных брокеров, один 8.10, другой 8.7 и везде одно и тоже

Ответ как обычно в вашем вопросе.
Между квиком 7.x и 8.5 изменилась версия Lua, теперь она 5.3
И в ей такое вот умолчательное конвертирование float в строку.

Цитата
Artem написал:
Код
      d0(currentPrice)
      message(currentPrice)

Надо заменить на
Код
currentPrice = d0(currentPrice)
message(currentPrice
 
Сама "проблема" обсуждается давно
https://forum.quik.ru/forum10/topic5319/
 
Владимир,спасибо, что откликнулись!

swerg, спасибо! Да, теперь нули ушли, Ваше решение помогло.
Но это значит, что то что работало до этого :
Код
                local Pr = getParamEx("SPBFUT", SecCode, "LAST").param_value
      sleep(10)      
      local M_Order = {
            ACTION      = "NEW_ORDER",
            ACCOUNT     = Depo,
            OPERATION   = Gen,
            CLASSCODE   = "SPBFUT",
            SECCODE     = SecCode,
            PRICE       = tostring(Pr),         
            TRANS_ID    = tostring(ID_Gen),   
            TYPE        = "M",
            CLIENT_CODE = tostring(ID_Gen),               
                  }
теперь не будет работать? И нужно добавлять дополнительные строки кода, равное увеличению времени работы в целом.
Страницы: 1
Читают тему (гостей: 1)
Наверх