Comment puis-je convertir une chaîne en un entier dans Lua? Je vous remercie.
J'ai une chaîne comme celle-ci:
a = "10"
Je voudrais qu'il soit converti en 10, le nombre.
Utilisez la fonction tonumber
. Comme dans a = tonumber("10")
.
Vous pouvez forcer une conversion implicite en utilisant une chaîne dans une opération arithmétique comme dans a= "10" + 0
, mais cela n’est pas aussi clair ni net que l’utilisation explicite de tonumber
.
Tous les nombres en Lua sont des flottants ( edit: Lua 5.2 ou moins). Si vous voulez vraiment convertir en "int" (ou au moins répliquer ce comportement), vous pouvez le faire:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
Dans ce cas, vous convertissez explicitement la chaîne (ou en réalité, quelle qu’elle soit) en un nombre, puis vous le tronquez comme le ferait un cast (int) en Java.
Edit: Ceci fonctionne toujours dans Lua 5.3, même si Lua 5.3 a de vrais entiers, puisque math.floor()
renvoie un entier, alors qu'un opérateur tel que number // 1
retournera toujours un float si number
est un float.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Sortie
string
number
dire que la chaîne que vous voulez transformer en nombre est dans la variable S
a=tonumber(S)
à condition qu'il y ait des nombres et uniquement des nombres dans S
, il retournera un nombre, mais s'il y a des caractères qui ne sont pas des nombres (sauf les périodes pour les flottants) , il retournera nil
L'option la plus claire consiste à utiliser tonumber .
A partir de 5.3.2, cette fonction détectera automatiquement les entiers (signés), float (si un point est présent) et hexadécimal (entiers et float, si la chaîne commence par "0x" ou "0X").
Les extraits suivants sont plus courts mais non équivalents:
a + 0 -- forces the conversion into float, due to how + works.
a | 0 -- (| is the bitwise or) forces the conversion into integer.
-- However, unlike `math.tointeger`, it errors if it fails.
Je recommande de vérifier Hyperpolyglot, a une comparaison impressionnante: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. En réalité, Lua se transforme en double et non en ints.
Le type de nombre représente réel (virgule flottante double précision) Nombres.
Vous pouvez faire un accesseur pour garder le "10" comme int 10 dedans.
Exemple:
x = tonumber("10")
si vous imprimez la variable x, il générera un int 10 et non "10"
comme processus Python
x = int ("10")
Merci.
Il est à noter que math.floor()
arrondit toujours le résultat et ne donne donc pas de résultat raisonnable pour les valeurs en virgule flottante négatives.
Par exemple, -10.4 représenté sous forme d'entier serait généralement tronqué ou arrondi à -10. Pourtant, le résultat de math.floor () n’est pas le même:
math.floor(-10.4) => -11
Pour la troncature avec conversion de type, la fonction d'assistance suivante fonctionnera:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Référence: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
tonumber
prend deux arguments, le premier est une chaîne qui est convertie en nombre et le second est la base de e
.
La valeur de retour tonumber
est en base 10.
Si aucun base
n'est fourni, il convertit le nombre en base 10.
> a = '101'
> tonumber(a)
101
Si base est fournie, elle est convertie en base donnée.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Si e
contient un caractère non valide, il renvoie nil
.
> --[[ Failed because base 2 numbers consist (0 and 1) --]]
> a = '112'
> tonumber(a, 2)
nil
>
> --[[ similar to above one, this failed because --]]
> --[[ base 8 consist (0 - 7) --]]
> --[[ base 10 consist (0 - 9) --]]
> a = 'AB'
> tonumber(a, 8)
nil
> tonumber(a, 10)
nil
> tonumber(a, 16)
171
J'ai répondu en considérant Lua5.3
Lua 5.3.1 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> math.floor("10");
10
> tonumber("10");
10
> "10" + 0;
10.0
> "10" | 0;
10