Aller au contenu
Arbu-jl

Arrondi En Lua

Recommended Posts

Bonsoir,

 

Je récupère la valeur température d'un IPX800 (Analogique 1) que j'aimerai intégrer sur mon HC2.

j'obtiens, de l'IPX 800 une valeur brute (vb), exemple 566.

Après quelques recherche, j'ai trouvé la valeur de conversion en degré pour la sonde installée sur l'IPX.

il s'agit de faire l'opération suivante: (vb * 0.00323 - 1.63) / 0.0326, le résultat obtenu est : 6.0791411042945, j'aimerai faire un arrondi à  deux digit après la virgule.

 

En code LUA, cela donne ..... 

local AN1 = math.floor(((response.AN1 * 0.00323 - 1.63) / 0.0326))
fibaro:setGlobal("AN1", AN1)
fibaro:debug(AN1)
fibaro:log(AN1)

cependant, la valeur maintenant affiché dans le HC2 est de: 6

J'aimerai avoir les deux digits après la virgule, 6.08, mais honnêtement, je n'y arrive pas....

Pouvez-vous m'aider?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, c'est parce que vous utilisez math.floor qui renvoi un entier, il faut faire une méthode d'arrondi, je ne suis pas encore spécialiste en LUA, mais j'ai l'impression qu'il n'y en a pas de toute prête. Mais c'est simple à  implémenter

 

function round(num, dec)
  local mult = 10^(dec or 0)
  return math.floor(num * mult + 0.5) / mult
end

il suffit ensuite d'appeler la fonction round, le premier paramètre est la valeur à  arrondir, le second le nombre de décimales à  conserver après la virgule

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

pas encore de box et jamais codé en LUA

 

La fonction : String.sub(AN1,1,4) ne fonctionnerait elle pas? à  tout hasard

Partager ce message


Lien à poster
Partager sur d’autres sites

en effet si math.floor renvoie un entier, la méthode de grégory est la plus propre

Partager ce message


Lien à poster
Partager sur d’autres sites

Cela suffira

 

  1. function round(num, dec)
  2. local mult = 10^(dec or 0)
  3. return math.ceil(num * mult) / mult
  4. end

Partager ce message


Lien à poster
Partager sur d’autres sites

  1. function round(num, dec)

  2. local mult = 10^(dec or 0)

return math.ceil(num * mult) / mult

end

 

PS : comment faite vous vos copie d'écran de code??

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu peux utiliser la fonction "insérer un extrait de code" c'est <> dans l'éditeur (sous le :)).

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup pour vos réponses.

Bon, vous allez vite voir que je suis très limité en programmation, comment puis-je intégrer cette fonction dans mon code.... :huh:

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

je pense avoir trouvé comment faire. En tout cas merci pour votre support.

Excellente soirée

HC2 = Net.FHttp("IPXIP",PORT)
response = HC2:GET("/api/xdevices.json?cmd=30")
response = json.decode(response)
fibaro:debug(response.AN1)
fibaro:debug(response.AN2)
fibaro:debug(response.AN3)

function round(num, dec)
  local mult = 10^(dec or 2)
  return math.floor(num * mult + 0.5) / mult
end

local AN1 = round((response.AN1* 0.00323 - 1.63) / 0.0326)

fibaro:setGlobal("AN1", AN1)
fibaro:debug(AN1)
fibaro:log(AN1)

Partager ce message


Lien à poster
Partager sur d’autres sites


-- Obtenir l'emplacement de l utilisateur avec l ID

local userLocation = fibaro:getValue(id, 'Location')

--local testLocation = fibaro:getValue (id2, 'Location')

local result

-- calculer la distance entre l utilisateur et le lieu du test

result = fibaro:calculateDistance(userLocation, testLocation)/1000

fibaro:debug('La distance est ' .. result .. 'm.')

fibaro:setGlobal("Distance", result)

fibaro:log(fibaro:getGlobalValue("Distance"))

Partager ce message


Lien à poster
Partager sur d’autres sites

bonsoir j ai posté le code ci-dessus

car je voudrais arrondir le resultat mais je n y arrive pas 

un idée

merci encore

Partager ce message


Lien à poster
Partager sur d’autres sites

Si tu ne veux pas les centimètres, le plus simple est 

result = math.floor(result)

Partager ce message


Lien à poster
Partager sur d’autres sites
[ERROR] 19:13:47: line 5: bad argument #1 to 'floor' (number expected, got nil)

@steven

merci pour ton aide mais je ne suis pas arrivé je sais pas ou mettre le code j avais déjà  essayer mais sans succès 

voici le message d erreur 

avec le code ci dessous

local result = math.floor(result)

merci encore

Partager ce message


Lien à poster
Partager sur d’autres sites


-- Obtenir l'emplacement de l utilisateur avec l ID

local userLocation = fibaro:getValue(id, 'Location')

--local testLocation = fibaro:getValue (id2, 'Location')

-- calculer la distance entre l utilisateur et le lieu du test

local result = fibaro:calculateDistance(userLocation, testLocation)/1000

result = math.floor(result)

fibaro:debug('La distance est ' .. result .. 'm.')

fibaro:setGlobal("Distance", result)

fibaro:log(fibaro:getGlobalValue("Distance"))

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

MERCI encore pour ton aide steven  :74:  :13:  :13:  :13:  :60:

tout fonctionne

;)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×