Aide et conseils concernant AutoIt et ses outils.
walkson
Modérateur
Messages : 1038 Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status :
Hors ligne
#1
Message
par walkson » jeu. 08 janv. 2015 19:06
Bonsoir,
J'essaye en vain de formater 69.78 en 069.780 (3 chiffres avant, 3 chiffres après la virgule)
J'ai tenté de concilier par stringformat() mais sans résultat
Code : Tout sélectionner
MsgBox(0,"",StringFormat("%03i", 69.78))
MsgBox(0,"",StringFormat("%.3f",69.78))
pas de réussite non plus avec StringRegExpReplace()
Ce que je souhaite, c'est une solution polyvalente qui affiche au minima X chiffres avant et au maxima X chiffres après la virgule quel que soit le nombre. Merci de votre aide (et bonne année
)
Modifié en dernier par
walkson le ven. 09 janv. 2015 19:20, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
orax
Modérateur
Messages : 1479 Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status :
Hors ligne
#2
Message
par orax » jeu. 08 janv. 2015 19:57
Avec StringFormat j'ai pu le faire comme ça. Mais il y a probablement une façon plus correcte de faire car là il faut mettre le nombre total de caractères (7).
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
mikell
Spammer !
Messages : 6292 Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status :
Hors ligne
#3
Message
par mikell » jeu. 08 janv. 2015 22:04
Code : Tout sélectionner
;$n = 69.78
;$n = .0679
;$n = 5
$n = 1234.5698
$i = 3 ; avant virgule
$d = 3 ; après virgule
$res = Execute(StringRegExpReplace(StringFormat("%." & $d & "f", $n), _
'(\d*)(\.\d*)', "StringFormat('%0' & $i & 'i' , '$1') & '$2' & ") & "''")
Msgbox(0,"", $res)Pas taper
Mais le code d'orax suffit largement ^^
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
jguinch
Modérateur
Messages : 2515 Enregistré le : lun. 14 févr. 2011 22:12
Status :
Hors ligne
#4
Message
par jguinch » jeu. 08 janv. 2015 22:50
En moins compliqué, mais pas plus simple :
Code : Tout sélectionner
$number = 69.78
$i = 8 ; avant virgule
$d = 4 ; après virgule
$right = StringReplace( StringFormat("%." & $d & "f", $number) , String(Int($number)), StringFormat( "%0" & $i & "d", Int($number) ), 1)
ConsoleWrite($right & @CRLF)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
walkson
Modérateur
Messages : 1038 Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status :
Hors ligne
#5
Message
par walkson » ven. 09 janv. 2015 10:52
Bonjour,
Alors là ! bravo. Une question, trois solutions.
Si la réponse d' Orax est limpide, celle de jguinch j'arrive à la détailler, mais celle de Mikell me reste totalement obscure. S'il pouvait l'expliquer ce serait the must !
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
jguinch
Modérateur
Messages : 2515 Enregistré le : lun. 14 févr. 2011 22:12
Status :
Hors ligne
#6
Message
par jguinch » ven. 09 janv. 2015 11:44
Je laisserai Mikell expliquer son choix
Pour y voir plus clair, je t'ai décomposé son code :
► Afficher le texte
Code : Tout sélectionner
$n = 1234.5698
$i = 7 ; avant virgule
$d = 6 ; après virgule
$e1 = StringFormat("%." & $d & "f", $n)
ConsoleWrite("$e1 = " & $e1 & @CRLF)
$e2 = StringRegExpReplace($e1, '(\d*)(\.\d*)', "StringFormat('%0' & $i & 'i' , '$1') & '$2'")
ConsoleWrite("$e2 = " & $e2 & @CRLF) ; $e2 contient une chaine de caractère qui sera exécuté par Execute
$res = Execute( $e2)
ConsoleWrite($res)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
walkson
Modérateur
Messages : 1038 Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status :
Hors ligne
#7
Message
par walkson » ven. 09 janv. 2015 12:39
Merci pour l'explication mais il reste un point étrange à la fin du script de Mikell ....& ") & "''") Je n'en vois pas l'utilité ?
Modifié en dernier par
walkson le ven. 09 janv. 2015 19:12, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Y01
Niveau 5
Messages : 160 Enregistré le : lun. 17 nov. 2014 10:46
Status :
Hors ligne
#8
Message
par Y01 » ven. 09 janv. 2015 12:56
J'ai essayé de comprendre au mieux le code original de mikell, ça donne ça :
En effet, je ne comprends pas non plus la fin avec le & "''"
Y01
walkson
Modérateur
Messages : 1038 Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status :
Hors ligne
#9
Message
par walkson » ven. 09 janv. 2015 19:20
Je passe le sujet en résolu et merci à Orax, jguinch et Mikell
si Mikell passe par ici, peut il m expliquer la fin du script ? Il fonctionne très bien sans mais ça m'intrigue...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
jguinch
Modérateur
Messages : 2515 Enregistré le : lun. 14 févr. 2011 22:12
Status :
Hors ligne
#10
Message
par jguinch » ven. 09 janv. 2015 19:35
Je pense que la fin du script est un résidu de ce que notre ami Mikell avait fait au début, et il a du oublier de l'enlever....
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
mikell
Spammer !
Messages : 6292 Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status :
Hors ligne
#11
Message
par mikell » ven. 09 janv. 2015 21:39
En effet... les quotes dans les execute(regex) peuvent être posées de plusieurs façons (c'est mon cauchemar personnel) et un combat acharné avec ces foutus guillemets peut éventuellement laisser des séquelles
Désolé
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
jguinch
Modérateur
Messages : 2515 Enregistré le : lun. 14 févr. 2011 22:12
Status :
Hors ligne
#12
Message
par jguinch » mer. 14 janv. 2015 22:12
Un peu tard, mais tant pis
http://www.autoitscript.com/forum/topic ... ?p=1217544
C'était pourtant si simple .... Je sais pas pourquoi on avait cherché compliqué
Code : Tout sélectionner
$number = 69.78
$i = 8 ; avant virgule
$d = 4 ; après virgule
$aNumber = StringSplit($number, ".", 2)
ConsoleWrite(StringFormat("%0" & $i & "i.%0" & $d & "i", $aNumber[0], $aNumber[1]) )
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
mikell
Spammer !
Messages : 6292 Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status :
Hors ligne
#13
Message
par mikell » mer. 14 janv. 2015 22:34
Peut-être parce que le résultat souhaité était "00000069.7800" et pas "00000069.0078" ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
jguinch
Modérateur
Messages : 2515 Enregistré le : lun. 14 févr. 2011 22:12
Status :
Hors ligne
#14
Message
par jguinch » jeu. 15 janv. 2015 09:33
Oups, chui allé un peu vite...
► Afficher le texte
Code : Tout sélectionner
$number = 69.78
$i = 8 ; avant virgule
$d = 4 ; après virgule
$aNumber = StringSplit($number, ".", 2)
$result = StringReplace( StringFormat("%0" & $i & "i.%-" & $d & "s", $aNumber[0], $aNumber[1]), " ", "0")
ConsoleWrite($result)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !