Разбить число на цифры

Rice.

Известный
Автор темы
Модератор
1,753
1,660
Версия MoonLoader
.026-beta
Доброго времени суток! Есть ли у кого-то функция, с помощью которой можно будет разбить число на цифры?
Пример: Число 913, выведет "9", "1", "3"
 
Решение
Lua:
-- Возвращает таблицу
function string:SplitToChars()
    local t = {}
    for w in self:gmatch('.') do
        table.insert(t)
    end
    return t
end

-- Пример
local exampleNumber = 42019
local splited = tostring(exampleNumber):SplitToChars()

-- Выводим таблицу
table.foreach(splited, print)

RedHolms

Известный
Проверенный
622
369
Lua:
-- Возвращает таблицу
function string:SplitToChars()
    local t = {}
    for w in self:gmatch('.') do
        table.insert(t)
    end
    return t
end

-- Пример
local exampleNumber = 42019
local splited = tostring(exampleNumber):SplitToChars()

-- Выводим таблицу
table.foreach(splited, print)
 
  • Нравится
Реакции: Rice.

Rice.

Известный
Автор темы
Модератор
1,753
1,660
Lua:
-- Возвращает таблицу
function string:SplitToChars()
    local t = {}
    for w in self:gmatch('.') do
        table.insert(t)
    end
    return t
end

-- Пример
local exampleNumber = 42019
local splited = tostring(exampleNumber):SplitToChars()

-- Выводим таблицу
table.foreach(splited, print)
Спасибо, маленькая ошибка в твоём коде. Готовая версия:
Lua:
-- пример
sampRegisterChatCommand('go', function()
    local exampleNumber = 42019
    local splited = tostring(exampleNumber):SplitToChars()
    table.foreach(splited, print)
end)
-- функция
function string:SplitToChars()
    local t = {}
    for w in self:gmatch('.') do
        table.insert(t, w)
    end
    return t
end
 

SR_team

like pancake
BH Team
4,819
6,523
Спасибо, маленькая ошибка в твоём коде. Готовая версия:
Lua:
-- пример
sampRegisterChatCommand('go', function()
    local exampleNumber = 42019
    local splited = tostring(exampleNumber):SplitToChars()
    table.foreach(splited, print)
end)
-- функция
function string:SplitToChars()
    local t = {}
    for w in self:gmatch('.') do
        table.insert(t, w)
    end
    return t
end
строки - медленное говно
 

Smeruxa

smeruxa.ru
Проверенный
1,418
776
Lua:
function splitValue(value)
    local result = {}
    while(value > 0)
    do
        table.insert(result, 1, math.fmod(value, 10))
        value = math.floor(value / 10)
    end
    return result
end

local split_values = splitValue(913);
for i = 1, #split_values, 1 do
    print(split_values[i])
end

Результат:
Код:
➜  ~ lua ./test.lua
9
1
3
Почему не так?
Lua:
function numbers_to(a)
    local result = {}
    while a > 0 do
        wait(0)
        table.insert(result, a % 10)
        a = a / 10;
    end
    return result;
end
 

RedHolms

Известный
Проверенный
622
369
Почему не так?
Lua:
function numbers_to(a)
    local result = {}
    while a > 0 do
        wait(0)
        table.insert(result, a % 10)
        a = a / 10;
    end
    return result;
end
Потому что a получится не целое число, и соответственно от деления на 10 оно никогда не станет нулём.

Не забывай, при делении на 10, не просто отбрасывается последняя цифра, и сдвигается запятая, т.е.:

24/10=2,4
math.floor что-бы убрать дробную часть
 
  • Нравится
Реакции: Smeruxa

SR_team

like pancake
BH Team
4,819
6,523
Почему не так?
Lua:
function numbers_to(a)
    local result = {}
    while a > 0 do
        wait(0)
        table.insert(result, a % 10)
        a = a / 10;
    end
    return result;
end
floor тебе объяснили. а еще ты убрал позицию для вставки в таблицу - из-за чего у тебя цифры будут в обратном порядке
 
  • Нравится
Реакции: Smeruxa

Smeruxa

smeruxa.ru
Проверенный
1,418
776
Потому что a получится не целое число, и соответственно от деления на 10 оно никогда не станет нулём.

Не забывай, при делении на 10, не просто отбрасывается последняя цифра, и сдвигается запятая, т.е.:

24/10=2,4
math.floor что-бы убрать дробную часть
Извиняюсь, в С++ просто делишь и без остатка (int), по привычке, извиняюсь