【Lua】数字を通貨表記(3桁カンマ区切り)に変換する

意外にも標準関数がなかったのでゴリゴリ実装してみました。

実装といっても、

引数:数値型(小数可)
返り値:3桁カンマ区切りの文字列

というだけの簡単な関数なのですが。
(賢い人ならワンライナーで書けそう)

関数

local function numberToCurrency(num) 
  local str1 = tostring(num)

  -- 小数点以下の抽出
  local str2 = ""
  local match_s = string.find(str1, ".", 1, true)
  if match_s ~= nil then
    str2 = string.sub(str1, match_s)
    str1 = string.sub(str1, 1, match_s - 1)
  end

  -- 整数部分を後ろから3桁ずつ取り出して","で繋ぐ
  local i = 1
  str1 = string.reverse(str1)
  while (i <= string.len(str1)) do
    str2 = "," .. string.reverse(string.sub(str1, i, i + 2)) .. str2
    i = i + 3
  end

  -- 先頭に余分な","がついているので2文字目以降を返す
  return string.sub(str2, 2)
end


実行結果

print(numberToCurrency(123456.789))
> 123,456.789

※大きすぎる数値(e+18等で表示される奴)は非対応です。そのまま表示されます。

コメント

タイトルとURLをコピーしました