Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 13h58   #1
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
Par défaut formatage de valeur + inserer decimales

Bonjour,

J'ai repris le code suivant (qui apparaissait dans différentes discussion) et qui fonctionne très bien. (merci à SpaceFrog)

Code :
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
31
<script type='text/javascript'>
 
function formatte(valeur){
 
if (isNaN(valeur.split(' ').join(''))){alert('numérique svp');
                   return false;}
 
var valeurformate =new Array()
var tempval=valeur.split('.')
valeur=tempval[0].split(' ').join('')
valeur=valeur.split('').reverse() 
 
var i=0
while(i<valeur.length){
 
 valeurformate.push( (valeur[i+2]?valeur[i+2]:'') + (valeur[i+1]?valeur[i+1]:'') + valeur[i] );
 i=i+3;
}
 
valeurformate=valeurformate.reverse().join(' ') +( tempval[1]?tempval[1].length>0?'.'+tempval[1]:'':'');
document.getElementById('moninput').value=valeurformate
}
</script>
 
</head>
 
<body>
<input id="moninput" type='text' onblur='formatte(this.value)' />
 
</body>
</html>
J'aimerais forcer l'affichage des décimales. J'avais essayer de mettre un toFixed(2) mais js retourne du string donc ça n'a évidement rien donné. On m'a conseille de faire "pour avoir d'un cote les décimale et de l'autre la partie entière à formater ... ensuite applique le formatage sur la partie entière et re-concatènes après avec les décimales" et la je bloque.

Et j'aimerais pouvoir gérer le cas ou ce sont des , qui sont entrées...

Help...?
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h54   #2
Membre Expert
 
Avatar de rotrevrep
 
Homme yannick inizan
Secrétaire d'état à la procrastination
Inscription : février 2011
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme yannick inizan
Âge : 25
Localisation : France, Cher (Centre)

Informations professionnelles :
Activité : Secrétaire d'état à la procrastination
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 304
Points : 1 118
Points : 1 118
Envoyer un message via MSN à rotrevrep Envoyer un message via Skype™ à rotrevrep
bonjour .
rajoute ceci au début de la fonction si tu rentre un nombre à virgule
Code :
1
2
 
if(valeur.replace('.',','))valeur=valeur.replace(',','.')
ça devrait aller
__________________
(marquer un post résolu si vous êtes satisfait de la réponse )
le chat caramail de retour ? :/ http://www.tchats.net/beta.php
les projets web en cours sont sur : https://github.com/rotrevrep
rotrevrep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h43   #3
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
au top
Une idée pour forcer l'affichage de 2 décimales ?
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h09   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 202
Points : 45 202
un replace sur la fin de chaine , les décimales sont dans tempval[1]
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h43   #5
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
j'ai fais un
Code :
valeurformate=valeurformate.reverse().join(' ') +( tempval[1]?tempval[1].length>0?'.'+tempval[1].replace:'':'');
mais ca ne donne rien (pas d'erreur non plus.

j'ai essayé un
Code :
document.getElementById("<?=$prefixe;?>blabla").value=valeurformate.replace;
et ca me donne -> function replace() { [native code]}
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 01h40   #6
Membre Expert
 
Avatar de rotrevrep
 
Homme yannick inizan
Secrétaire d'état à la procrastination
Inscription : février 2011
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme yannick inizan
Âge : 25
Localisation : France, Cher (Centre)

Informations professionnelles :
Activité : Secrétaire d'état à la procrastination
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 304
Points : 1 118
Points : 1 118
Envoyer un message via MSN à rotrevrep Envoyer un message via Skype™ à rotrevrep
Code :
string.replace(old,new)
__________________
(marquer un post résolu si vous êtes satisfait de la réponse )
le chat caramail de retour ? :/ http://www.tchats.net/beta.php
les projets web en cours sont sur : https://github.com/rotrevrep
rotrevrep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 20h04   #7
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Bonjour,
Citation:
J'avais essayer de mettre un toFixed(2) mais js retourne du string donc ça n'a évidement rien donné.
il faut convertir la chaine en flottant avant le toFixed
Code :
1
2
var sTmp ='125.25689';
alert( parseFloat(sTmp).toFixed(2));
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 11h54   #8
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
J'étais passé sur autre chose.
La fonction n'est toujours pas finalisée

J'ai essayé le toFixed mais à priori il ne fonctionne pas dans ce cas.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function formatte(valeur){
if(valeur.replace('.',','))valeur=valeur.replace(',','.');
if (isNaN(valeur.split(' ').join(''))){alert('Merci d\'indiquer une valeur numérique.');
	return false;}
var valeurformate = new Array();
var tempval=valeur.split('.');
	valeur=tempval[0].split(' ').join('');
	valeur=valeur.split('').reverse();
	var i=0;
		while(i<valeur.length){
			valeurformate.push( (valeur[i+2]?valeur[i+2]:'') + (valeur[i+1]?valeur[i+1]:'') + valeur[i] );
			i=i+3;
		}
valeurformate=valeurformate.reverse().join(' ') +( tempval[1]?tempval[1].length>0?'.'+tempval[1]:'':'');
parseFloat(valeurformate).toFixed(2);
document.getElementById("<?=$variable;?>nbre").value=valeurformate;
}
et le
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function formatte(valeur){
if(valeur.replace('.',','))valeur=valeur.replace(',','.');
if (isNaN(valeur.split(' ').join(''))){alert('Merci d\'indiquer une valeur numérique.');
	return false;}
var valeurformate = new Array();
var tempval=valeur.split('.');
	valeur=tempval[0].split(' ').join('');
	valeur=valeur.split('').reverse();
	var i=0;
		while(i<valeur.length){
			valeurformate.push( (valeur[i+2]?valeur[i+2]:'') + (valeur[i+1]?valeur[i+1]:'') + valeur[i] );
			i=i+3;
		}
valeurformate=valeurformate.reverse().join(' ') +( tempval[1]?tempval[1].length>0?'.'+tempval[1]:'':'');
valeurformate=string.replace(old,new);
document.getElementById("<?=$prefixe;?>nbre").value=valeurformate;
}
non plus....
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2011, 09h42   #9
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
dans le 1st code tu mets, cette ligne ne sert à rien!
Code :
parseFloat(valeurformate).toFixed(2);
dans la ligne suivante il y a affectation du résultat dans la variable
Code :
valeurformate = parseFloat(valeurformate).toFixed(2);
cela est bien plus utile...

tu pourrais également faire
Code :
document.getElementById("<?=$variable;?>nbre").value = parseFloat(valeurformate).toFixed(2);
Pas regardé le 2nd...
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 11h13   #10
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
merci pour ton retour, j'avais deja essayé le
Code :
document.getElementById("<?=$variable;?>nbre").value = parseFloat(valeurformate).toFixed(2);
mais quand je le fais, il me tronque ma fonction formate

exemple : valeur 980 000
une fois le toFixed(2) mis en place ca me rend un 980.00
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 15h05   #11
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Citation:
exemple : valeur 980 000
une fois le toFixed(2) mis en place ca me rend un 980.00
il te faut commencer par enlever les espaces de la chaine, ainsi que transformer les éventuelle virgule en point pour que cela fonctionne.
Code :
1
2
3
var sTmp = '980 000,11544';
sTmp = sTmp.replace(' ','').replace(',', '.');
alert( parseFloat(sTmp).toFixed(2));
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 17h34   #12
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
merci. On est d'accord.

Seulement je souhaite obtenir un nombre au format 125 000.00 ou 125 000,00 mais pas au format 125000.00 (ou 125000,00).

Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 17h46   #13
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 808
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 808
Points : 35 789
Points : 35 789
C'est pourtant simple.
Soit tu veux un nombre et c'est obligatoirement au format 125000.00, soit tu veux un format 125 000.00 et c'est pas un nombre.

Ce que tu propose NoSmoking, c'est d'afficher selon ton format mais de faire les calculs en retransformant en nombre...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 18h02   #14
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
ok, alors je n'ai pas compris.

J'ai repris ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
function formatte(valeur){
if(valeur.replace('.',','))valeur=valeur.replace(',','.');
if (isNaN(valeur.split(' ').join(''))){alert('Merci d\'indiquer une valeur numérique.');
	return false;}
var valeurformate = new Array();
var tempval=valeur.split('.');
	valeur=tempval[0].split(' ').join('');
	valeur=valeur.split('').reverse();
	var i=0;
		while(i<valeur.length){
			valeurformate.push( (valeur[i+2]?valeur[i+2]:'') + (valeur[i+1]?valeur[i+1]:'') + valeur[i] );
			i=i+3;
		}
valeurformate=valeurformate.reverse().join(' ') +( tempval[1]?tempval[1].length>0?'.'+tempval[1]:'':'');
valeurformate = valeurformate.replace(' ','').replace(',', '.');
document.getElementById("<?=$prefixe;?>nbre").value=parseFloat(valeurformate).toFixed(2);
}
Ce qui ne sert pas a grand chose (hormis le fait que j’apprenne) puisque d'un coté je rajoute mes espaces mais je n'ai pas mes décimales puis je rajoute mes décimales sur ma dernière ligne mais je vire mes espaces...

Je cherche a avoir un a affichage au format 123 456.00 ET un traitement sur un nombre 123456.00, ca devrait être possible avec une seule fonction non ?

j'avoue que je suis perdu la...
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 20h07   #15
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Citation:
Je cherche a avoir un a affichage au format 123 456.00 ET un traitement sur un nombre 123456.00, ca devrait être possible avec une seule fonction non ?
la réponse est pour moi NON, il ne faut pas tout mélanger, tiens cela me rappelles http://www.developpez.net/forums/d11...rateur-milles/

Il te faut une fonction de formatage pour affichage et une pour un unformatage pour le calcul

Je te propose, sur base de la fonction que tu nous as livré ce petit exemple commenté
Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE HTML>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[...]</title>
</head>
<body>
<input id="TEST" type="text"  onfocus="unFormate( this.value);" onblur="formate(this.value);">
<script type="text/javascript">
function unFormate( valeur){
  // change virgule en point
  valeur = valeur.replace(',','.');
  // supprime les espaces
  valeur = valeur.replace(/\s/g, '');
  document.getElementById("TEST").value = valeur;
}
function formate( valeur){
  // change virgule en point
  valeur = valeur.replace(',','.');
  // supprime les espaces
  valeur = valeur.replace(/\s/g, '');
  // converti en flottant
  valeur = parseFloat( valeur);
  // test si numérique
  if( isNaN( valeur)){
    alert('Merci d\'indiquer une valeur numérique.');
    return false;
  }
  // ajout des décimales
  valeur = valeur.toFixed(2);
  // récup la partie entière de la valeur
  var tempval = valeur.split('.');
  // tempval[0] = partie entière
  // tempval[1] = partie décimale
  // met la partie entière dans valeur
  valeur = tempval[0];
  // inverse la chaine
  valeur = valeur.split('').reverse();
  // insertion des espaces
  var i = 0;
  var valeurformate = [];
  while( i < valeur.length){
    valeurformate.push( (valeur[i+2] ? valeur[i+2]:'') + (valeur[i+1]?valeur[i+1]:'') + valeur[i] );
    i = i+3;
  }
  // traite la partie entière en ajoutant les espaces
  valeurformate  = valeurformate.reverse().join(' ');
  // ajoute la partie décimale mettre une virgule ou un point
  valeurformate += (',' + tempval[1]);
  // affiche la valeur
  document.getElementById("TEST").value = valeurformate;
}
// init champ de test
formate('9800012,461');
</script>
</body>
</html>
Une façon de ne pas se perdre est de commenter ce que tu réalise à l'intérieur de ta fonction pour mieux en appréhender le sens.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h51   #16
Candidat au titre de Membre du Club
 
Benoit Truc
Inscription : juin 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Benoit Truc

Informations forums :
Inscription : juin 2010
Messages : 30
Points : 13
Points : 13
Ok, merci a tous pour ces éclaircissements et d'avoir pris le temps de me répondre.
Inccube est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h47.


 
 
 
 
Partenaires

Hébergement Web