Vâng, hãy thực hiện việc này từ trên xuống dưới. Trước hết, đó là thất bại vì bạn đã có một lỗi tham khảo:
...
for k = 1, 3 do
newint = string.sub(mystring, -k*v) -- What is 'mystring'?
end
...
Nhiều khả năng bạn muốn i
để có mặt ở đó, không mystring
.
Thứ hai, trong khi thay thế mystring
bằng i
sẽ sửa lỗi, nó vẫn không hoạt động chính xác.
> =reformatint(100)
,100
> =reformatint(1)
,000
Điều đó rõ ràng là không đúng. Nó có vẻ như những gì bạn đang cố gắng làm là đi qua chuỗi, và xây dựng chuỗi mới với dấu phẩy được thêm vào. Nhưng có một vài vấn đề ...
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
Với một số làm lại, bạn có thể có một chức năng hoạt động.
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
Chức năng ở trên dường như hoạt động chính xác. Tuy nhiên, nó khá phức tạp ... Có thể muốn làm cho nó dễ đọc hơn.
Là một mặt lưu ý, một quick google search tìm thấy một chức năng đó đã được thực hiện cho việc này:
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, tôi đã tách một chút có chứa bí ẩn từ một trang web, rõ ràng là tôi đủ ngớ ngẩn để quên hoán đổi điều đó. khi nó bật ra, tìm kiếm google của tôi là khủng khiếp không chính xác. Tôi muốn cảm ơn bạn và tôi sẽ xem xét kỹ hơn cách string.sub() hoạt động. Tôi hy vọng rằng sự ngu xuẩn của tôi đến nay sẽ khiến tôi học được điều gì đó. – Hultin
@Hultin: Không cần phải nhìn xuống chính mình - tất cả chúng ta đều phạm sai lầm, và đôi khi họ là những người ngớ ngẩn. Đó là cách chúng ta học. Và có, hiểu 'chuỗi.sub() 'là một nỗ lực đáng giá - nó thực sự hơi khác với các hàm chuỗi con trong các ngôn ngữ khác. Ngoài ra, chào mừng bạn đến với StackOverflow! – voithos