Хорошо, давайте возьмем это сверху вниз. Прежде всего, это недостаток, потому что у вас есть ссылочный ошибка:
...
for k = 1, 3 do
newint = string.sub(mystring, -k*v) -- What is 'mystring'?
end
...
Скорее всего, вы хотите i
быть там, а не mystring
.
Во-вторых, при замене mystring
с помощью i
будут исправлены ошибки, они все равно будут работать неправильно.
> =reformatint(100)
,100
> =reformatint(1)
,000
Это, очевидно, не так. Кажется, что вы пытаетесь сделать, это пройти через строку и создать новую строку с добавленной запятой. Но есть пара проблем ...
function reformatint(i)
local length = string.len(i)
for v = 1, math.floor(length/3) do
for k = 1, 3 do -- What is this inner loop for?
newint = string.sub(mystring, -k*v) -- This chops off the end of
-- your string only
end
newint = ','..newint -- This will make your result have a ',' at
-- the beginning, no matter what
end
return newint
end
С некоторой доработкой вы можете получить функцию, которая работает.
function reformatint(integer)
for i = 1, math.floor((string.len(integer)-1)/3) do
integer = string.sub(integer, 1, -3*i-i) ..
',' ..
string.sub(integer, -3*i-i+1)
end
return integer
end
Функция, как представляется, работает правильно. Тем не менее, он довольно запутанный ... Мог бы сделать его более читаемым.
В качестве примечания, quick google search находит функцию, которая уже была сделана для этого:
function comma_value(amount)
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if (k==0) then
break
end
end
return formatted
end
uff, я разорвал бит, содержащий мистик с веб-страницы, очевидно, я был достаточно глупым, чтобы забыть поменять это. , как оказалось, мои поисковые запросы Google были ужасно неправильными. Я хотел бы поблагодарить вас, и я рассмотрю гораздо глубже, как работает string.sub(). Надеюсь, что до сих пор моя глупость позволит мне чему-то научиться. – Hultin
@ Hultin: Не нужно смотреть на себя сверху вниз - мы все совершаем ошибки, а иногда они глупые. Так мы учимся. И да, понимая 'string.sub() 'является стоящим делом - он фактически немного отличается от подстрочных функций на других языках. Кроме того, добро пожаловать в StackOverflow! – voithos