Luaがtostring()
関数を使用して数値を文字列に変換する方法を知りたいのですが。
数値が丸められている場合(つまり、number == (int) number
の場合)、または常に10.0
?
Lua C APIを使用せずに、CでLuaのtostring
の正確な動作を模倣する必要があります。この場合、lua_State
。
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.0
は2.0
としてではなく、2
として出力されます。)数値に特定の形式が必要な場合は、常に明示的な形式を使用する必要があります。
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
5.3.4を使用していて、簡単な修正プログラムが必要な場合は、math.floorを使用してください。int.numberにキャストします。これは効率の点で@warspykingの答えを打ち負かしますが、コードの束であるクールさを欠いています。
>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0
Lua 5.3では、整数型のため、フロートのtostring
(数値は整数と同等かもしれませんが)は"'.0'
接尾辞を追加しますが、それはできないという意味ではありません短くします!
local str = tostring(n)
if str:sub(-2) == ".0" then
str = str:sub(1,-3)
end