Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 24/09/2007, 09h57   #1
nma
Candidat au titre de Membre du Club
 
Inscription : mai 2002
Messages : 60
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 60
Points : 12
Points : 12
Par défaut [CSV] Données décimales venant d'un fichier csv

Bonjour,

J'ai une liste d'article avec des prix (en decimal) dans un fichier csv que je transforme dans un tableau a deux dimensions.
Quand j'affiche les valeurs j'ai bien mon prix de type 8,5 sans probleme.
echo $tab[x][8];
par contre si je fais :
echo $tab[x][8]*2;
J'obtiens la valeur 16 au lieu de 8,5 * 2 = 17

Voila mon pb et je comprend pas.
Voici ma classe de transformation. Je passe systematiquement par la fonction getTableauFiltrer($col,$val) pour afficher mes varticles.

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
class fichierTableau {
 
	private $fichier;  		// true si fichier existe listearticle.csv
	private $tabLigne;  // tableau contenant les lignes du fichier
	private $tableau;	// tableau à deux dimension contenant tous les articles
	private $contenu_fichier;
	private $nbCol;		// nombre de colonne
	private $nbLig;		// nombre de lignes
 
	function fichierTableau() {
		$this->fichier = false;
		$this->tableau = array();
		$this->tabligne = array();
		$this->contenu_fichier = "vide";
		if(file_exists("panier/listearticles.csv")) {
			$this->fichier=true;
			$this->tabLigne = file('panier/listearticles.csv'); //Place le contenu du fichier dans un tableau
 
			 if(is_array($this->tabLigne)) //Si la variable $tabLigne est bien un tableau, on peut continuer
			 {
				  $this->contenu_fichier = '';
				  $li=1;
				  foreach($this->tabLigne AS $ligne) {		
 
						if($li>0) {
							$data = explode(";",$ligne);
							$this->nbCol = count($data);
							for($col=0;$col<count($data);$col++) {
							$this->tableau[$li-1][$col] = $data[$col];
							}// Fin $li
 
						$this->contenu_fichier .= $this->tableau[$li-1][0]."<br>";
				   $li=$li+1;
				   }  // Fin foreach
 
 
			  } // Fin is array
			  $this->nbLig = $li - 1;
		} // Fin file exist
 
 
		}
		else {
			$this->fichier=false;
			$this->tabLigne = null;
			$this->contenu_fichier.="Fichier introuvale";
		}
	}
 
	function destroy() {
		unset ($this->tabLigne);
		unset ($this->contenu_fichier);
		unset ($this->fichier);
		unset ($this->tableau);
	}
 
	function getInit() {
		return $this->fichier;
	}
 
	function getContenu() {
		return $this->contenu_fichier;
	}
 
	function getTableau() {
		return $this->tableau;
	}
 
	function getNbCol() {
		return $this->nbCol;
	}
 
	function getNbLig() {
		return $this->nbLig;
	}
	function getTableauFiltrer($col,$val) {
	$tf = array();
	$xx=0;
		for($x=0;$x<$this->getNbLig();$x++) {
			if($this->tableau[$x][10]==1) {
				if($this->tableau[$x][$col]==$val) {
					for($y=0;$y<$this->getNbCol();$y++) {
						$tf[$xx][$y]=$this->tableau[$x][$y];
					}
					$xx = $xx + 1;
				}
			}
		}
 
 
		return $tf;
	}
 
 
}
Merci d'avance de votre aide.
Nicolas
nma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 10h41   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
fait la multiplication par 2.0 au lieu de 2 si tu veux récupérer un nombre réel
ou au moins
Code :
$resultat = $mavaleur * ((float) 2);
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 10h54   #3
nma
Candidat au titre de Membre du Club
 
Inscription : mai 2002
Messages : 60
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 60
Points : 12
Points : 12
Bonjour
et merci de cette reponse
Toutefois j'avais essayer avec 2.0 cela ne fonctionnait pas et je viens de faire le test avec ((float)2) et malheureusement cela ne fonctionne pas non plus.
Tous les décimaux sont tronqué a leur partie entiere.
Une autre idée ?
nma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 11h44   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Le séparateur au niveau de la partie décimale n'est pas la virgule mais le point. Dans le premier cas PHP considèrera le nombre comme étant une chaîne et s'arrêtera au premier caractère invalide (la virgule) donc vous aurez pour résultat 18 pour 18,251.

Est-ce votre cas ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 11h45   #5
nma
Candidat au titre de Membre du Club
 
Inscription : mai 2002
Messages : 60
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 60
Points : 12
Points : 12
Ca marche !!!!!


En fait le pb venait du fichier csv dans lequel j'ai remplacé les , par des . en ajoutant (float) dans les formules de calcul, ca roule !!!

Merci
nma 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 23h54.


 
 
 
 
Partenaires

Hébergement Web