Lua - Number to string behaviour
Lua converts the numbers as is:
print(tostring(10)) => "10"
print(tostring(10.0)) => "10.0"
print(tostring(10.1)) => "10.1"
If you want to play around with them, there's a small online parser for simple commands like this : http://www.lua.org/cgi-bin/demo This uses Lua 5.3.1
edit I must support Egor's comment, it's version dependent. I ran this locally on my system:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(tostring(10))
10
> print(tostring(10.0))
10
If you are using 5.3.4 and you need a quick hotfix, use math.floor - it casts it to an int-number. This beats @warspyking answer in efficiency, but lacks the coolness that is bunches of code.
>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0
>type(math.floor(54.0))
integer
>type(54.0)
number
In Lua 5.3, due to the integer type, tostring
on a float (although it's Numeric value may be equivalent to an integer) will add a "'.0'
suffix, but that doesn't mean you can't shorten it!
local str = tostring(n)
if str:sub(-2) == ".0" then
str = str:sub(1,-3)
end
In Lua 5.2 or earlier, both tostring(10)
and tostring(10.0)
result as the string "10"
.
In Lua 5.3, this has changed:
print(tostring(10)) -- "10"
print(tostring(10.0)) -- "10.0"
That's because Lua 5.3 introduced the integer subtype. From Changes in the Language:
The conversion of a float to a string now adds a
.0
suffix to the result if it looks like an integer. (For instance, the float2.0
will be printed as2.0
, not as2
.) You should always use an explicit format when you need a specific format for numbers.