2017-01-08 5 views
4

При любом количестве сортировки 78.689 или 1.12, то, что я ищу, это программно округлить число до ближайшего десятого места после десятичного числа.Как округлить до ближайшей десятой?

Я пытаюсь сделать это в среде, где есть функция math.floor(), которая округляется до самого низкого целого числа, и насколько я могу судить по документации, нет ничего похожего на функцию PHP round().

+2

'string.format ("%. 1f ", percent * 100)' –

ответ

7

Там просто фрагмент кода по адресу: http://lua-users.org/wiki/SimpleRound

function round(num, numDecimalPlaces) 
    local mult = 10^(numDecimalPlaces or 0) 
    return math.floor(num * mult + 0.5)/mult 
end 

Это будет шалить, когда numDecimalPlaces отрицательный, но есть еще несколько примеров на этой странице.

0

В моем случае я просто пытался сделать строковое представление этого числа ... однако, я думаю, что это решение может оказаться полезным и для других.

string.sub(tostring(percent * 100), 1, 4) 

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

3

Вы можете использовать принуждение, чтобы сделать это ... Он работает так же, как printf ... Вы можете попробовать сделать что-то вроде этого фрагмента.

value = 8.9756354 
print(string.format("%2.1f", value)) 
-- output: 9.0 
1

Учитывая, что это Roblox, было бы просто легче сделать это глобальная переменная вместо того, чтобы один модуль или создать свой собственный Gloo.

_G.round = function(x, factor) 
    local factor = (factor) and (10^factor) or 0 
    return math.floor((x + 0.5) * factor)/factor 
end