web-dev-qa-db-ja.com

Lua-数値から文字列への振る舞い

Luaがtostring()関数を使用して数値を文字列に変換する方法を知りたいのですが。

数値が丸められている場合(つまり、number == (int) numberの場合)、または常に10.0

Lua C APIを使用せずに、CでLuaのtostringの正確な動作を模倣する必要があります。この場合、lua_State

11
Virus721

Lua 5.2以前では、tostring(10)tostring(10.0)の両方が文字列"10"になります。

Lua 5.3では、これが変更されました。

print(tostring(10)) -- "10"
print(tostring(10.0)) -- "10.0"

これは、Lua 5.3が整数サブタイプを導入したためです。から 言語の変更

Floatから文字列への変換では、整数のように見える場合、.0接尾辞が結果に追加されるようになりました。 (たとえば、フロート2.02.0としてではなく、2として出力されます。)数値に特定の形式が必要な場合は、常に明示的な形式を使用する必要があります。

23
Yu Hao

Luaは数値をそのまま変換します。

print(tostring(10)) => "10"
print(tostring(10.0)) => "10.0"
print(tostring(10.1)) => "10.1"

それらを試してみたい場合は、次のような単純なコマンド用の小さなオンラインパーサーがあります。 http://www.lua.org/cgi-bin/demo これはLua 5.3.1を使用します

editEgorのコメントをサポートする必要があります。バージョンに依存します。私のシステムでこれをローカルで実行しました:

Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(tostring(10))
10
> print(tostring(10.0)) 
10
2
codingbunny

5.3.4を使用していて、簡単な修正プログラムが必要な場合は、math.floorを使用してください。int.numberにキャストします。これは効率の点で@warspykingの答えを打ち負かしますが、コードの束であるクールさを欠いています。

>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0
1
user2262111

Lua 5.3では、整数型のため、フロートのtostring(数値は整数と同等かもしれませんが)は"'.0'接尾辞を追加しますが、それはできないという意味ではありません短くします!

local str = tostring(n)
if str:sub(-2) == ".0" then
    str = str:sub(1,-3)
end
0
warspyking