Arbu-jl Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 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?
Gregory Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 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 1
Nvince76 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 pas encore de box et jamais codé en LUA La fonction : String.sub(AN1,1,4) ne fonctionnerait elle pas? à tout hasard
Nvince76 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 en effet si math.floor renvoie un entier, la méthode de grégory est la plus propre
Nvince76 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Cela suffira function round(num, dec) local mult = 10^(dec or 0) return math.ceil(num * mult) / mult end
Nvince76 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 function round(num, dec) local mult = 10^(dec or 0) return math.ceil(num * mult) / mult end PS : comment faite vous vos copie d'écran de code??
Krikroff Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Tu peux utiliser la fonction "insérer un extrait de code" c'est <> dans l'éditeur (sous le ).
Arbu-jl Posté(e) le 13 février 2014 Auteur Signaler Posté(e) le 13 février 2014 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....
Arbu-jl Posté(e) le 13 février 2014 Auteur Signaler Posté(e) le 13 février 2014 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)
flechg Posté(e) le 22 octobre 2016 Signaler Posté(e) le 22 octobre 2016 -- 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"))
flechg Posté(e) le 22 octobre 2016 Signaler Posté(e) le 22 octobre 2016 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
Steven Posté(e) le 25 octobre 2016 Signaler Posté(e) le 25 octobre 2016 Si tu ne veux pas les centimètres, le plus simple est result = math.floor(result)
flechg Posté(e) le 26 octobre 2016 Signaler Posté(e) le 26 octobre 2016 [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
Steven Posté(e) le 31 octobre 2016 Signaler Posté(e) le 31 octobre 2016 -- 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")) 1
flechg Posté(e) le 31 octobre 2016 Signaler Posté(e) le 31 octobre 2016 MERCI encore pour ton aide steven tout fonctionne 1
Messages recommandés