|Add to this template|
Lua supports one number datatype, which are generally C doubles. They perform the usual purpose of representing numerical data.
Numbers can be specified in the common decimal format (with a possible exponent and sign) or hexadecimal format. Numbers can always be coerced, or converted, into strings, but the reverse is not always true. String to number coercion can be attempted with tonumber(), which will return nil if the coercion is not possible.
Because doubles are used, and they are subject to precision loss, equality comparisons could cause problems; fortunately, doubles can also exactly represent integers and these issues will not occur as long as the number does not end up getting a fractional component (such as through division). The integer range that can be represented exactly with doubles is [-252, 252 - 1] (about ±4.5 · 1015), though without using string.format anything larger than 1014 or smaller than -1014 will be printed in scientific notation. Integer precision will be lost if doubles exceed their range.
The math library is used to perform more complex operations on numbers, but basic arithmetic is part of the core language.
Unlike many other languages, 0 is considered to be true in a boolean context.