Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Formatage de nombre comme "#.###.###,##" | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Formatage de nombre comme "#.###.###,##" Jeu 8 Oct 2009 - 11:12 | |
| Comme il n'y a pas d'instruction de formatage de nombre sur Panoramic pour l'instant, J'ai fais un programme qui résouds ce problème. Il y a plusieurs façon d'arriver à ce résultat, et si quelqu'un a une solution meilleur ou plus simple, il sera le bien venu. J'ai mis des variables complexes dans la procédure pour éviter qu'il ai doublon avec son propre programme, comme cela est une routine à rajouter dans un programme existant, et que les variables locales n'existent pas sur Panoramic. J'en profite pour savoir ce que vous en pensez: - je regrette l'absence d'une instruction de procédure avec passage de paramètre(s), ce qui évite d'avoir des variables de transfert, surtout que Panoramic avec tout ce qui sera rajouté est loin d'être fini et oblige à faire des routine de compensation. Ici j'ai utilisé "n" pour transférer un nombre, n est simple, et using$ pour le formatage. Cette partie est un programme pour faire des essais, les nombre sont en data. Attention les serations et la virgule doivent être identique dans using$ que ceux qui ont étés choisis dans les variables (Modifier à 15h10) - Code:
-
dim indexCodag%,longueurcodage%,NbDecimal% dim n,nbTravail,zeronegatif,retourN ,nCoder dim virg$,using$,codag$,chiffre$,separation$,entier$,decimal$
label using,go,fin
virg$=",":separation$="'" ' data pour faire des essais sur différents nombres data .12,12354.215,5428.2,123,578452.2569,985487542,1.25,87,-1572.5 ,0 button 2:left 2,450:top 2,300 :caption 2,"essai":on_click 2,go
using$="#'###,##" n=1948.2501:gosub using :print codag$ ;" n était:";retourN n=-.487 :gosub using :print codag$ ;" n était:";retourN n=-0.5787 :gosub using :print codag$ ;" n était:";retourN print:print end
go: using$="##'###'###'###,##" read n :if n=0 then goto fin gosub using print codag$ ;" n était:";retourN ;" n est devenu=";nCoder return
' Pour faire appel à cette routine: définir using$ le nombre à envoyer est "n"
' au retour récupérer la variable codag$ qui a formatée le nombre ' retourN était le nombre envoyé ' nCoder est le nombre envoyé puis arrondi au formatage, peut-être repris ' pour les calculs
using: retourN=n :' seulement récuperer le nombre de départ non formaté nbTravail=n NbDecimal%=len(using$)-instr(using$,virg$) : zeronegatif=0 if left$(str$(nbTravail),3)="-0." then zeronegatif=1 nbTravail=int(nbTravail*power(10,NbDecimal%)+.5) :nCoder=nbTravail/power(10,NbDecimal%): codag$=str$(nbTravail) if zeronegatif=1 then codag$="-0"+mid$(codag$,2,len(codag$)-1) longueurcodage%=len(codag$) : decimal$=right$(codag$,NbDecimal%) codag$=" "+left$(codag$,instr(codag$,decimal$)-1) longueurcodage%=instr(using$,virg$)-1:indexCodag%=len(codag$):entier$="" while longueurcodage%>1 if indexCodag%>0 chiffre$=mid$(codag$,indexCodag%,1) if chiffre$=" " and indexCodag%=len(codag$) entier$="0" else if mid$(using$,longueurcodage%,1)=separation$ if chiffre$=" " entier$=chiffre$+" "+entier$ else entier$=chiffre$+separation$+entier$ end_if longueurcodage%=longueurcodage%-1 else entier$=chiffre$ + entier$ end_if end_if else entier$=" "+entier$ end_if indexCodag%=indexCodag%-1 : longueurcodage%=longueurcodage%-1 end_while codag$=entier$+virg$+decimal$ return
fin: message "sortie" terminate
Ceci est la partie pour être inclus dans un programme: - Code:
-
' à inclure dans les dim et labels du programme (vérifier si il y a doublon) dim indexCodag%,longueurcodage%,NbDecimal% dim n,nbTravail,zeronegatif,retourN ,nCoder[color=brown] dim virg$,using$,codag$,chiffre$,separation$,entier$,decimal$
dim n :rem variable de transfert pour formater le nombre à voir si doublon VARIABLE SIMPLE pour faciliter la ' programmation
label using :rem à rajouter
rem déclaration virg$=",":separation$="'" :' à modifier selon ses préférences using$="##'###'###'###,##":' idem
rem REM rem **Ligne suivante à retirer** REM rem REM ' exemple: (n est le nombre à formater et using$ la représentation) using$="##'###'###,##":rem séparations et virgule identiques aux variables n=-128.5487962 : gosub using : print codag$
' routine de codage du nombre n, selon le format "using$" ' PARTIE à INCLURE DANS LE PROGRAMME
using: retourN=n :' seulement récuperer le nombre de départ non formaté nbTravail=n NbDecimal%=len(using$)-instr(using$,virg$) : zeronegatif=0 if left$(str$(nbTravail),3)="-0." then zeronegatif=1 nbTravail=int(nbTravail*power(10,NbDecimal%)+.5) :nCoder=nbTravail/power(10,NbDecimal%): codag$=str$(nbTravail) if zeronegatif=1 then codag$="-0"+mid$(codag$,2,len(codag$)-1) longueurcodage%=len(codag$) : decimal$=right$(codag$,NbDecimal%) codag$=" "+left$(codag$,instr(codag$,decimal$)-1) longueurcodage%=instr(using$,virg$)-1:indexCodag%=len(codag$):entier$="" while longueurcodage%>1 if indexCodag%>0 chiffre$=mid$(codag$,indexCodag%,1) if chiffre$=" " and indexCodag%=len(codag$) entier$="0" else if mid$(using$,longueurcodage%,1)=separation$ if chiffre$=" " entier$=chiffre$+" "+entier$ else entier$=chiffre$+separation$+entier$ end_if longueurcodage%=longueurcodage%-1 else entier$=chiffre$ + entier$ end_if end_if else entier$=" "+entier$ end_if indexCodag%=indexCodag%-1 : longueurcodage%=longueurcodage%-1 end_while codag$=entier$+virg$+decimal$ return
Surtout nh'ésiter pas à trouver mieux
Dernière édition par cosmos70 le Ven 9 Oct 2009 - 7:59, édité 1 fois |
| | | Invité Invité
| Sujet: Re: Formatage de nombre comme "#.###.###,##" Jeu 8 Oct 2009 - 15:49 | |
| Réédité le 24/01/10 pour correction Je renvoie un scripte avec toujours la même SYNTAXE pour using$, pour que d'un programme à l'autre, il n'y ait pas confusion Dans le code: using$ est "##.###,##" avec la virgule qui est une virgule, et les séparateurs: " " (le point). Pour le formatage, par contre vous choisissez ce qui vous plait: exemple: separation$="'" : virg$=".", ce qui est plus simple, et évitera des erreurs. - Code:
-
rem programme USING ###.## version 2 ' =============insertion au du programme======================================== ' dim à rajouter (attention au doublon) dim indexCodag%,longueurcodage%,NbDecimal% dim nbTravail,zeronegatif,retourN ,nCoder dim virg$,sansVirg$,using$,codag$,chiffre$,separation$,entier$,decimal$ dim n : rem variable de transfert pour la routine ' dim du programme normal dim a%
label using :rem label à rajouter
rem DÉFINITION des caractères à pour séparer les mille.. et la virgule rem dans ce programme, la SYNTAXE de using est toujours la même
separation$="'" : virg$="," :' c'est ici que l'on choisi la virgule (peut avoir plusieurs caractères) using$="#.###.###.###,##" :' ATTENTION la virgule est toujours "," pour using
' ========20 lignes qui ne font pas parties du programme mais explique==========
' Pour faire appel à cette routine: définir using$ le nombre à envoyer est "n"
' au retour récupérer la variable codag$ qui a formatée le nombre ' retourN était le nombre envoyé ' nCoder est le nombre envoyé puis arrondi au formatage, peut-être repris ' pour les calculs ' ============================================================================== ' _____9 lignes d'essais__+ END________________ memo 1:width 1,580:height 1,400 :print_target_is 1:font_name 1,"Courier New" data 1, 1.12 , 15.24 , 5484.25 , 158 ,8957.54 , 5687956.54, 6.45879 , 0.2548 data 12 , 5.28 , 15.478 , 678.5 , 0 data 15 , 125 , 5 for a%=1 to 9:read n :gosub using :print codag$," retourN:",retourN," nCoder:",nCoder :next a% print :print "changement de virgule et using$" : using$="####,#":virg$="." for a%=1 to 5:read n :gosub using :print codag$," retourN:",retourN," nCoder:",nCoder :next a% print:print "virgule texte":using$="#.###":virg$="litres" for a%=1 to 3:read n :gosub using :print codag$," retourN:",retourN," nCoder:",nCoder :next a%
end ' ================insertion de la sous-routine================================== using: retourN=n :' seulement récuperer le nombre de départ non formaté nbTravail=n :decimal$="":sansVirg$=virg$ NbDecimal%=len(using$)-instr(using$,",") : zeronegatif=0 :if instr(using$,",")=0 then NbDecimal%=0:sansVirg$="" if left$(str$(nbTravail),3)="-0." then zeronegatif=1 nbTravail=int(nbTravail*power(10,NbDecimal%)+.5) :nCoder=nbTravail/power(10,NbDecimal%): codag$=str$(nbTravail) if zeronegatif=1 then codag$="-0"+mid$(codag$,2,len(codag$)-1)
if NbDecimal%>0 then decimal$=right$(codag$,NbDecimal%):' ici if remplacer la virgule if NbDecimal%>0 codag$=" "+left$(codag$,instr(codag$,decimal$)-1) longueurcodage%=instr(using$,","):indexCodag%=len(codag$):entier$="" :message "long ="+str$(longueurcodage%) else codag$=" "+codag$ longueurcodage%=len(using$):indexCodag%=len(codag$):entier$="" end_if
while longueurcodage%>1 if indexCodag%>0 chiffre$=mid$(codag$,indexCodag%,1) if chiffre$=" " and indexCodag%=len(codag$) entier$="0" else if mid$(using$,longueurcodage%,1)="." if chiffre$=" " entier$=chiffre$+" "+entier$ else entier$=chiffre$+separation$+entier$ end_if longueurcodage%=longueurcodage%-1 else entier$=chiffre$ + entier$ end_if end_if else entier$=" "+entier$ end_if
indexCodag%=indexCodag%-1 : longueurcodage%=longueurcodage%-1 end_while codag$=entier$+sansVirg$+decimal$ return ' ==============================================================================
La Virgule peut-être multiple comme " Kg" "Fr" ou "euros "Salutation |
| | | | Formatage de nombre comme "#.###.###,##" | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |