Changer le séparateur de décimales de virgule en point

Résolu
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 28 juin 2020 à 08:52
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 28 juin 2020 à 16:44
Bonjour,

J'ai dans une table Accces une zone de format Text qui contient des nombres avec le point comme séparateur de décimales (ex : 123.0). Je remplis une grille avec ces données que je trie en ordre croissant. Le problème est que la zone est de format texte et non numérique, donc la séquence de tri est :


Comme on peut le voir, après 10.9, on ne passe pas à 11.0 mais à 100.0. Le 11.0 est beaucoup plus loin.

Je décide donc de changer le type de zone de Text en Integer (copie de la table dans une nouvelle table dont le champ est numérique) pour avoir un tri dans l'ordre numérique. Le problème est que le champ d'origine contient un point, ce qui n'est pas accepté come séparateur sur nos machines en Europe.

Changer le point en virgule est simple, mais remet en cause beaucoup de code qui est basé sur le texte avec un point. J'ai vu qu'il existait en VBA une instruction qui permeet de définir la valeur du séparateur décimal (Application.decimalSeparator = ".") mais pas valide en VB.

Question : existe-t-il en VB6 un moyen de forcer pour une zone numérique le séparateur de décimales à un point ?

Merci d'avance

Notpa

5 réponses

Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
28 juin 2020 à 13:34
Oui normalement ça devrait le faire si le numéro d’ordre ne dépasse pas 9.
Sinon, il te faudra appliquer le même principe dans la seconde partie
Par exemple pour des numéros d’ordre pouvant dépasser 99.
0001.001 => 0001.100

Sinon, tu mets 2 champs entier dans ta table et tu tries par page puis par ordre
1
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
28 juin 2020 à 09:38
Bonjour

Je n’est pas la réponse à ta question finale, mais p’tet des pistes pour toi.

Je décide donc de changer le type de zone de Text en Integer (copie de la table dans une nouvelle table dont le champ est numérique) pour avoir un tri dans l'ordre numérique. Le problème est que le champ d'origine contient un point, ce qui n'est pas accepté come séparateur sur nos machines en Europe.


Je vais ignorer le terme Integer, puisqu’on parle de nombres décimaux.
Dans la base de elle-même, il n’y a ni point ni virgule. Ce qui est enregistré c’est un double ou float, format qui combine un nombre binaire entier (n) et un exposant entier (e) tel que x = n * 2^e avec x valeur binaire du nombre décimal (voir ici pour plus d’explications https://www.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3 )
Le symbole décimal intervient à 2 moments
  • à l’affichage
  • à la saisie (et c’est là que ça coince)


En effet, il y a quasiment autant de façon de représenter les nombres décimaux qu’il y a de pays.
Donc forcément pour que l’ordinateur s’y retrouve, il faut respecter une « culture »

Quoiqu’il en soit, pour que ta base de données considère ces valeurs comme des nombres décimaux, t’as pas le choix, il faut que tu les saisisses avec la bonne culture.

mais remet en cause beaucoup de code qui est basé sur le texte avec un point.

Bon, on va passer sur l’erreur de conception (faire des calculs sur du texte et non des nombres). Quand tu lis la base de données, tu convertis le nombre en texte et ensuite tu fais un replace de virgule en points

Une autre solution consisterait à multiplier toutes tes valeurs par 10 (en supposant qu’il n’y ait toujours qu’une décimale) et la tu les stockes dans un champ entier.
A la lecture tu construis ton texte en concatenant les résultats de la division euclidienne et du modulo par 10.
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
28 juin 2020 à 09:50
Bonjour whishmeril et merci de répondre.

faire des calculs sur du texte et non des nombres

Je ne fais pas de calculs. Ces nombres correspondent à des n° de pages et un n° d'ordre dans la page. Ex , 123.1 fait référence à la page n° 123 et au n°d'ordre 1. Jamais de calculs là dessus !

Je pense à une autre solution : modifier la base de données pour avoir toujours 4 chiffres suivis du point et d'un chiffre. Ex : 1.2 devient 0001.2, 123.5 : 0123.5, etc.

Avec cette méthode je n'ai plus besoin de zone numérique et garde ma zone format texte : le tri sera alors croissant et dans le bon ordre.

Qu'en penses-tu ?
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
28 juin 2020 à 14:57
OK. Je vais faire comme ça. Le deuxième chiffre ne dépasse jamais 9.

Merci pour ton aide. Comment fais-je maintenant pour ce sujet ? Le passer en Résolu n'est pas correct puisque je n'ai pas de solution mais juste un bypass. Peut-on marquer le sujet comme Annulé ou Bypassé ?
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
28 juin 2020 à 15:08
Ha non, y'a pas de marquage en demi teinte, c'est résolu ou pas.
A toi de voir
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
28 juin 2020 à 16:44
Tant pis. Et comme on ne peut pas non plus modifier le titre...
Je passe donc en faux-Résolu.

Merci encore !

Notpa
0
Rejoignez-nous