FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Formatage de nombre comme "#.###.###,##" Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Formatage de nombre comme "#.###.###,##" Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Formatage de nombre comme "#.###.###,##" Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Formatage de nombre comme "#.###.###,##" Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Formatage de nombre comme "#.###.###,##" Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Formatage de nombre comme "#.###.###,##" Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Formatage de nombre comme "#.###.###,##" Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Formatage de nombre comme "#.###.###,##" Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Formatage de nombre comme "#.###.###,##" Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Formatage de nombre comme "#.###.###,##" Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Formatage de nombre comme "#.###.###,##" Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Formatage de nombre comme "#.###.###,##" Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Formatage de nombre comme "#.###.###,##" Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Formatage de nombre comme "#.###.###,##" Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Formatage de nombre comme "#.###.###,##" Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 Formatage de nombre comme "#.###.###,##"

Aller en bas 
AuteurMessage
Invité
Invité




Formatage de nombre comme "#.###.###,##" Empty
MessageSujet: Formatage de nombre comme "#.###.###,##"   Formatage de nombre comme "#.###.###,##" EmptyJeu 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
Revenir en haut Aller en bas
Invité
Invité




Formatage de nombre comme "#.###.###,##" Empty
MessageSujet: Re: Formatage de nombre comme "#.###.###,##"   Formatage de nombre comme "#.###.###,##" EmptyJeu 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
Revenir en haut Aller en bas
 
Formatage de nombre comme "#.###.###,##"
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Formatage d'un nombre
» Comment déterminer le nombre de chiffres d'un nombre naturel
» Une commande petite comme ça, efficace comme ça!
» Bouton "STOP" pour stopper PANORAMIC
» persistance pas grave du "virus avast"

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: