Lua chaîne à int
Comment puis-je convertir une chaîne en entier dans Lua? Merci.
J'ai une chaîne comme ceci:
a = "10"
Je voudrais qu'il soit converti en 10, le nombre.
11 réponses
Utiliser le tonumber
la fonction. 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 ce n'est pas aussi clair ou aussi propre que d'utiliser tonumber
explicitement.
Tous les nombres dans Lua sont flottants ( edit: {[6] } 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
Auquel cas vous convertissez explicitement la chaîne (ou vraiment, quelle qu'elle soit) en un nombre, puis tronquez le nombre comme le ferait un cast (int) en Java.
Edit: cela fonctionne toujours dans Lua 5.3, même si Lua 5.3 a des entiers réels, car math.floor()
renvoie un entier, alors qu'un opérateur tel que number // 1
retournera toujours un flotteur si number
est un float.
Dites 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 seulement des nombres dans S
il renverra un nombre,
mais s'il y a des caractères qui ne sont pas des nombres (sauf des points pour les flottants)
il retournera nil
L'option la plus claire consiste à utiliser tonumber.
À partir de 5.3.2, cette fonction détecte automatiquement les entiers (signés), float (si un point est présent) et hexadécimal (entiers et flottants, si la chaîne commence par " 0x "ou " 0X").
Les extraits suivants sont plus courts mais pas é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.
, Vous pouvez faire un accesseur pour garder le "10" comme int 10.
Exemple:
x = tonumber("10")
Si vous imprimez la variable x, elle affichera un int 10 et non " 10 "
Même chose que le processus Python
X = int ("10")
Merci.
Je recommande de vérifier Hyperpolyglot, a une comparaison impressionnante: http://hyperpolyglot.org/
Http://hyperpolyglot.org/more#str-to-num-note
Ps. En fait, Lua se convertit en doubles pas en ints.
Le type de nombre représente réel (virgule flottante à double précision) nombre.
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
Il convient de noter que math.floor()
arrondit toujours, et ne donne donc pas un résultat raisonnable pour les valeurs à virgule flottante négatives.
Par exemple, -10.4 représenté comme un entier serait généralement tronqué ou arrondi à -10. Pourtant, le résultat des mathématiques.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
Voici ce que vous devriez mettre
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20