Bueno, tomemos esto de arriba hacia abajo. En primer lugar, está fallando debido a que tienes un error de referencia:
...
for k = 1, 3 do
newint = string.sub(mystring, -k*v) -- What is 'mystring'?
end
...
más probable es que quieren i
para estar allí, no mystring
.
En segundo lugar, al reemplazar mystring
con i
corregirá los errores, todavía no funcionará correctamente.
> =reformatint(100)
,100
> =reformatint(1)
,000
Eso obviamente no es correcto. Parece que lo que estás tratando de hacer es ir a través de la cadena y construir la nueva cadena con las comas añadidas. Pero hay un par de problemas ...
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
Con algunas repeticiones, puede obtener una función que funcione.
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
La función anterior parece funcionar correctamente. Sin embargo, es bastante intrincado ... Podría querer que sea más legible.
Como nota al margen, una quick google search encuentra una función que ya se ha hecho para esto:
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, arranqué el bit que contiene mystring de una página web, obviamente fui lo suficientemente tonto como para olvidarme de cambiar eso. como resultado, mis búsquedas de google fueron terriblemente incorrectas. Me gustaría darle las gracias, y voy a ver mucho más profundo cómo funciona string.sub(). Espero que mi estupidez hasta ahora al menos me permita aprender algo. – Hultin
@Hultin: No hay necesidad de menospreciarse a sí mismo; todos cometemos errores, y a veces son tontos. Así es como aprendemos. Y sí, entendiendo 'cadena.sub() 'es un esfuerzo que vale la pena - en realidad es un poco diferente que las funciones de subcadenas en otros idiomas. Además, bienvenido a StackOverflow! – voithos