Page 1 sur 1
[R] Format nombre
Posté : jeu. 08 janv. 2015 19:06
par walkson
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

)
Re: [..] Format nombre
Posté : jeu. 08 janv. 2015 19:57
par orax
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).
Re: [..] Format nombre
Posté : jeu. 08 janv. 2015 22:04
par mikell
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 ^^
Re: [..] Format nombre
Posté : jeu. 08 janv. 2015 22:50
par jguinch
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)
Re: [..] Format nombre
Posté : ven. 09 janv. 2015 10:52
par walkson
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 !
Re: [..] Format nombre
Posté : ven. 09 janv. 2015 11:44
par jguinch
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)
Re: [..] Format nombre
Posté : ven. 09 janv. 2015 12:39
par walkson
Merci pour l'explication mais il reste un point étrange à la fin du script de Mikell ....& ") & "''") Je n'en vois pas l'utilité ?
Re: [..] Format nombre
Posté : ven. 09 janv. 2015 12:56
par Y01
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 & "''"
Re: [..] Format nombre
Posté : ven. 09 janv. 2015 19:20
par walkson
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...
Re: [R] Format nombre
Posté : ven. 09 janv. 2015 19:35
par jguinch
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....

Re: [R] Format nombre
Posté : ven. 09 janv. 2015 21:39
par mikell
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é

Re: [R] Format nombre
Posté : mer. 14 janv. 2015 22:12
par jguinch
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]) )
Re: [R] Format nombre
Posté : mer. 14 janv. 2015 22:34
par mikell
Peut-être parce que le résultat souhaité était "00000069.7800" et pas "00000069.0078" ?

Re: [R] Format nombre
Posté : jeu. 15 janv. 2015 09:33
par jguinch
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)