string to float et précisions

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
Avatar de l’utilisateur
yoyoyaya
Messages : 1656
Inscription : 30 Mai 2011 13:14
Localisation : PAAAAARTOUUUU
Contact :

string to float et précisions

Message par yoyoyaya » 21 Mai 2014 12:02

Lu les gonz, i need your help.

Je récupère un long string que je coupe (sans problèmes) pour récupérer des données qui sont ensuite convertis en float.
Seulement, unity, dans sa grande bonté, à décidé de me faire chier et à tendance à me plomber les valeurs.
voyez vous même :

Code : Tout sélectionner

avec un point au lieu d'une virgule
float a = float.Parse("950561722.8715973258");
print(a.ToString());
//me sort 9.505617E+08

float a = float.Parse("950561722.8715973258");
print(a);
//me sort 9.505617E+08

avec une virgule au lieu d'un point
float a = float.Parse("950561722,8715973258");
print(a.ToString());
//me sort 9.505618E+18

float a = float.Parse("950561722,8715973258");
print(a);
//me sort 9.505618E+18
et c'est pareil dans mon gui.

Je n'y comprends vraiment plus rien. Le fait est que j'ai besoin de passer ces longues lignes de texte en float pour pouvoir calculer avec et je dois absolument garder la précision.

Donc quelqu'un aurait une idée pour passer d'énormes chaine de chiffres de strings avec des points/virgules en float tout en gardant la précision du tout ? Même du ikea (bordel pas propre), je prends.

J'espère être compréhensible, vous n'imaginez même pas à quel point ça me prend la tête et je suis crevé (regardez l'heure du post, je ne suis pas allé faire dodo pour vous dire :lol: )

Please, sauvez un poney :mrgreen:
yoyo
ImageImage

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: string to float et précisions

Message par F@B » 21 Mai 2014 12:13

salut Poney!

je sais pas si j'ai tout pigé mais ça serait pas un problème de floating point, essaye avec un double au lieu de float?
Dernière édition par F@B le 21 Mai 2014 12:14, édité 1 fois.
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: string to float et précisions

Message par Max » 21 Mai 2014 12:13

avec

Code : Tout sélectionner

double a = double.Parse("950561722.8715973258");
print(a.ToString());
cela devrait améliorer les choses, non ? (voir passer par decimal)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: string to float et précisions

Message par boubouk50 » 21 Mai 2014 12:15

D'après Wikipedia
Quand un float dépasse une certaine valeur > 10000 je crois, alors il le réduit à un float inférieur à 10 * 10^x.
Du coup 950561722.8715973258 = 9.505617*10^8
L'approximation du float à 6 décimales après la virgule, te fais perdre la précision... Un float est une approximation. Voilà pour l'explication.
Pour la solution, je sais pas trop.
Pour des variables aussi énormes, tu pourrais utiliser un Integer pour l'entier associé à un float pour les décimales en segmentant ta String en deux par le point:
int a = 950561722;
float b = 0.8715973258;
Le problème restera le même je pense si tu veux revenir à un float après, l'approximation sera toujours la... Peut être que dans ce cas de figure avec de grands nombres, l'Integer est plus précis.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: string to float et précisions

Message par artemisart » 21 Mai 2014 12:29

Effectivement le float sera pas assez précis, double est 2x plus précis mais pas si ça suffit pas essaye decimal (et au pire int + float comme boubouk50 a dit mais c'est le moins pratique).
Tu dois aussi pouvoir trouver des libs pour gérer précisément les grand nombres (style BigInteger mais avec des décimales).

Avatar de l’utilisateur
yoyoyaya
Messages : 1656
Inscription : 30 Mai 2011 13:14
Localisation : PAAAAARTOUUUU
Contact :

Re: string to float et précisions

Message par yoyoyaya » 21 Mai 2014 12:39

vite fait avant d'aller au dodo.

Merci à vous les filles, c'est du rapide (vais pas m'en plaindre ^^)

Habitué aux int/float alakon, je n'ai pas pensé au double. Merci donc max et fab

boubouk, j'avais aussi pensé à couper au niveau du point mais je trouvais ça un peu radical et je cherchais d'abord à savoir si il existait une solution plus simple. Maintenant, j'ai testé en coupant comme dit pour obtenir deux double (le int me sort que la valeur est trop large ...) et ça semble faire le job.
Je devrais donc pouvoir tirer un truc de tout ça. Je verrais au réveil et vous tiendrais au courant des résultats (c'est un peu un cas extrême mais qui sait, ça pourrait peut-être servir à un autre).
ImageImage

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: string to float et précisions

Message par NDrew » 21 Mai 2014 12:43

Hors sujet après avoir revu la question
Dernière édition par NDrew le 21 Mai 2014 13:43, édité 1 fois.

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: string to float et précisions

Message par NDrew » 21 Mai 2014 12:58

Désolé, je me répond...;

Donc la différence entre le . et la , vient du fait que quand il y a une virgule, il la fait juste sauter et convertit le nombre 9 505 617 228 715 973 258

d'ou le e+18

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: string to float et précisions

Message par artemisart » 21 Mai 2014 13:45

yoyoyaya a écrit :Maintenant, j'ai testé en coupant comme dit pour obtenir deux double (le int me sort que la valeur est trop large ...) et ça semble faire le job.
Evite le double pour la partie entière :P un long ou ulong (toujours positif) ou même un BigInteger (System.Numerics) serait mieux.

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: string to float et précisions

Message par F@B » 21 Mai 2014 14:05

et oui Arte a raison évite le double pour la partie entière il va réserver des Bits pour stocker des décimales que tu n'utilise pas! :)

bon courage et de rien et surtout bonne nuit!! ;) (arf il est 14h ici t'es au Quebec?!)
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Répondre

Revenir vers « Scripting »