Aller au contenu
Franco268

Variables à virgule

Recommended Posts

Hello,

 

heure = 1
heure = heure + 1
self:debug("heure: " ..heure)

Mon debug m'affiche 2.0

Même si je met un tostring()

 

Est ce normal?

Il faut vraiment que je traite la variable pour enlever le .0

Est il possible de déclarer ma variable en integer pour ne pas avoir ce .0 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je crois que c'est une des nouveautés du LUA 5.3, les nombres sont traités en number, et il existe le type integer à part.

Le souci c'est que même si tu utilises des integer, LUA va automatiquement les convertir en number dès que tu feras une opération mathématique dessus. Et il n'est pas possible de caster les variables comme on le fait sur d'autres langages.

 

ça m'avait bien surpris au début lors de mes premières migrations de codes LUA depuis la HC2 vers la HC3.

Il faut que tu prennes l'habitude de formater tes nombres quand tu veux les afficher (dans le log, dans un label, etc..), avec string.format()

Exemple pour un nombre entier :

self:debug(string.format("heure : %d", heure))

 

Autrement, tu peux aussi te créer ta propre fonction générique round(), vu que LUA n'en propose pas nativement. Perso elle est incluse dans ma "librairie" d'outils que j'utilise dans tous mes développements de QuickApps.

Exemple :

--
-- Round number to specified decimal
--
-- Usage :
-- local entier = round(123.456, 0)
-- local decimal = round(123.456, 1)
--
function round(num, idp)
	local mult = 10 ^ (idp or 0)
	return math.floor(num * mult + 0.5) / mult
end

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer oui effectivement c'est arrivé avec la version 5.3 de LUA, mais juste dommage qu'ils n'aient pas ajouté une possibilité de faire un cast sur un INT, et une fonction toInt(), ca éviterait de devoir chaque fois convertir.

Partager ce message


Lien à poster
Partager sur d’autres sites
print(_VERSION)

hour = 1 
hour = hour + 1
print ("hour:".. hour) 

hour = hour + "1"
print ("hour:".. hour) 

a = 1
b = 2.0
print("Type a:",type(a))
print("Type b:",type(b))

print("math.type a:",math.type(a))
print("math.type b:",math.type(b))

a = 3.0
b = 3.1
print("tointeger a:",math.tointeger(a))
print("tointeger b:",math.tointeger(b))
Lua 5.3
hour:2
hour:3.0
Type a:	number
Type b:	number
math.type a:	integer
math.type b:	float
tointeger a:	3
tointeger b:	nil

http://www.lua.org/manual/5.3/manual.html#pdf-math.tointeger

 

  • Like 5

Partager ce message


Lien à poster
Partager sur d’autres sites

×