2014-09-29 2 views
1

Этот сценарий отображает значение в программе:Lua: Прекрасно Обрезать значение

string.format("%d", math.floor(self:value())) -- Where self:value() is a number like 4.1256913947 

Этот скрипт имеет то же самое значение и выводит его на моей консоли.

math.floor(value) -- Where value is the same number as self:value() was...it's just being sent to another function as well 

Проблема заключается в отображаемом значении, а напечатанное значение в консоли не соответствует. Это случается редко и нечасто, но когда пользователь вводит данные, которые немного превосходят целое число (например, 4.0029893417), или что-то другое, тогда он не будет обрабатывать его до 3 в этом случае без причины. Я пробовал math.ceil, но обратный эффект происходит, когда он закрывается (т.е. 4.89898989), он печатает 5, но отображает 4. Есть ли способ сделать так, чтобы число отлично усекалось? Правильно ли отображается и правильно печатается?

Примечание: Значение неизменное, так как иногда эти дополнительные десятичные знаки должны быть там и обрабатываться соответственно в других местах/функциях.

Спасибо :)

+3

Проблема в том, что проблема где-то еще. Предоставьте [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve). –

ответ

1

Из любопытства, я провел некоторые тесты, используя некоторые из условий, описанных вами. К сожалению (или, к счастью), я не смог воспроизвести проблему, о которой вы говорите. Сниппает ниже добавляет и вычитают случайные числа, так что результат составляет около 4, а затем сравнивает оба метода печати (сравнивает по полученной строке):

for i=1,10000000 do 
    local value = 3.9 + math.random() * 0.2 
    local s1 = string.format("%d", math.floor(value)) 
    local s2 = tostring(math.floor(value)) 
    if s1 ~= s2 then print "Error" end 
end 

Как вы можете догадаться, «Ошибка» не показывает вверх.

Я сделал еще один эксперимент:

local l = 4 
for i=1,100000 do 
    local k = math.pow(10,-i) 
    local rand = math.random() * 0.1 
    local subtracted = l - k - rand 
    if math.floor(subtracted + k + rand) < 4 then 
     print "error" 
    end 
end 

Добавляя очень небольшое количество, я надеялся получить аналогичный результат того, что вы описали, но опять же, проблема не проявляется.

Поэтому я должен заключить, что проблема, вероятно, лежит в разнице между функцией self: value() и значением переменной (иногда они имеют разные значения).

+0

Как заметил другой человек, это был другой раздел, вызывающий проблему. По-видимому, человек до меня забыл сказать мне, что есть другой сценарий или часть, которая переопределяет одно и то же значение на дисплее, поэтому дисплей «неточен» до некоторой степени. Функция вызывалась с учетом исходной функции (т. Е. String.format (% d math.floored и т. Д.) И этой строки (которая испортилась со значениями) ... 'string.format ("%. ".. math .abs (math.ceil (-math.log (self._step)/math.log (10))) .. "f", self: value()) ', который, как вы можете видеть, заставит отображаемое значение немного (по крайней мере, я думаю) – B1313

+0

Итак, я добавил чек на self._step для того, чтобы быть целым числом (для которого есть только значение за это, 1 ИЛИ для чего-то еще ... используйте более длинную версию строка. Пока это работает, но если кто-то захочет попробовать ее проверить или посмотреть, действительно ли это проблема, это было бы оценено. Я не так хорош в журналах, а не в том, как Lua обрабатывает их. – B1313

Смежные вопросы