Conversion d'une chaîne en flottant en C #


108

Je convertis une chaîne comme "41.00027357629127", et j'utilise;

Convert.ToSingle("41.00027357629127");

ou

float.Parse("41.00027357629127");

Ces méthodes renvoient 4.10002732E + 15 .

Quand je passe au flottant, je veux "41.00027357629127". Cette chaîne doit être la même ...


1
Comment savez-vous à quoi il est converti - voilà comment
affichez-

1
Une idée de pourquoi c'est ToSingle? Et pas ToFloat?
Lord Darth Vader

41.00027357629127 ne doit pas être 4.10002732E + 15 en notation scientifique, à moins bien sûr que votre culture n'utilise une virgule décimale au lieu de la virgule décimale (et un point comme séparateur de milliers), de sorte que le nombre se lirait réellement: 4100027357629127 par conséquent s'affichera sous la forme 4.10002732E + 15
ljgww

Réponses:


229

Les paramètres régionaux de votre thread sont définis sur un dans lequel la marque décimale est "," au lieu de ".".

Essayez d'utiliser ceci:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

Notez, cependant, qu'un flottant ne peut pas contenir autant de chiffres de précision. Vous devrez utiliser double ou Decimal pour ce faire.


35
n'oubliez pas d'ajouter l'espace using System.Globalization;de noms pour accéderCultureInfo
Mobiletainment

24

Tout d'abord, il s'agit simplement d'une présentation du floatnombre que vous voyez dans le débogueur. La valeur réelle est approximativement exacte (autant que possible).

Remarque: utilisez toujours les informations CultureInfo lorsque vous traitez des nombres à virgule flottante par rapport aux chaînes.

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

C'est juste un exemple; choisissez une culture appropriée pour votre cas.


comment choisir mon CultureInfo? Je suis en Turquie où je vais ajouter TR-TR?
Mehmet

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow

20

Vous pouvez utiliser les éléments suivants:

float asd = (float) Convert.ToDouble("41.00027357629127");

4
Veuillez expliquer pourquoi c'est la bonne réponse.
Bas Peeters


4

La précision du float est de 7 chiffres. Si vous souhaitez conserver l'ensemble du lot, vous devez utiliser le type double qui garde 15-16 chiffres. Concernant le formatage, regardez un article sur le formatage des doubles . Et vous devez vous soucier des séparateurs décimaux en C # .


ı fatigué double.Parse il retourne 4100027357629127.0 c'est dommage
Mehmet

2
Cela ressemble au "." le caractère n'est pas le séparateur décimal de votre langue? Découvrez stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe

0

Vous pouvez double.Parse("41.00027357629127");


Je ne pense pas qu'il demande comment le contourner.
OR Mapper

-2

Vous pouvez utiliser l'analyse avec double au lieu de float pour obtenir une valeur plus précise.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.