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.

140
lua
demandé sur Nicol Bolas 2012-06-09 19:09:26

11 réponses

Utiliser le tonumber la fonction. Comme dans a = tonumber("10").

232
répondu Nicol Bolas 2016-12-16 15:12:46

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.

28
répondu lhf 2012-06-09 18:52:16

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.

7
répondu Stormswept 2015-10-23 15:09:53
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

Sortie

   string                                                                                                                                                                          
   number
6
répondu 2015-03-26 16:34:00

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

4
répondu CORE craftX 2015-03-12 16:56:00

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.
    
3
répondu 4xel 2018-06-19 13:46:23

, 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.

2
répondu user5555332 2015-07-12 09:19:31

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.

Http://www.lua.org/pil/2.3.html

1
répondu Marcs 2015-09-10 03:59:55
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
0
répondu Viacheslav 2018-07-01 14:49:26

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

0
répondu Leslie Krause 2018-07-17 18:05:56

Voici ce que vous devriez mettre

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)

output:

20
-1
répondu theresaspyaroundhere 2016-12-16 22:41:41