Conversione di una stringa in virgola mobile in C #


108

Sto convertendo una stringa come "41.00027357629127" e sto usando;

Convert.ToSingle("41.00027357629127");

o

float.Parse("41.00027357629127");

Questi metodi restituiscono 4.10002732E + 15 .

Quando converto in float voglio "41.00027357629127". Questa stringa dovrebbe essere la stessa ...


1
Come fai a sapere in cosa viene convertito - ecco come stai visualizzando il numero
mmmmmm

1
Qualche idea sul perché sia ​​ToSingle? E non ToFloat?
Lord Darth Vader

41.00027357629127 non deve essere 4.10002732E + 15 in notazione scientifica, a meno che, naturalmente, la tua cultura non usi la virgola decimale invece del punto decimale (e il punto come separatore delle migliaia), quindi il numero verrebbe effettivamente letto: 4100027357629127 di conseguenza verrà visualizzato come 4.10002732E + 15
ljgww

Risposte:


229

La locale del thread è impostata su una in cui il segno decimale è "," invece di ".".

Prova a usare questo:

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

Notare, tuttavia, che un float non può contenere così tante cifre di precisione. Dovresti usare double o decimal per farlo.


35
non dimenticare di aggiungere lo spazio dei nomi using System.Globalization;per accedereCultureInfo
Mobiletainment

24

Innanzitutto, è solo una presentazione del floatnumero che vedi nel debugger. Il vero valore è approssimativamente esatto (per quanto possibile).

Nota: utilizzare sempre le informazioni CultureInfo quando si tratta di numeri in virgola mobile rispetto a stringhe.

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

Questo è solo un esempio; scegli una cultura appropriata per il tuo caso.


come posso scegliere il mio CultureInfo? Sono in Turchia, dove aggiungerò TR-TR?
Mehmet

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

20

Puoi usare quanto segue:

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

4
Fornisci un contesto sul motivo per cui questa è la risposta giusta.
Bas Peeters


4

La precisione del float è di 7 cifre. Se vuoi mantenere l'intero lotto, devi usare il doppio tipo che mantiene 15-16 cifre. Per quanto riguarda la formattazione, guarda un post sulla formattazione doppia . E devi preoccuparti dei separatori decimali in C # .


Sono stanco doppio Parse restituisce 4100027357629127.0 è troppo male
Mehmet

2
Questo suona come il "." il carattere non è il separatore decimale nella tua lingua? Scopri stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe


-2

È possibile utilizzare l'analisi con double anziché float per ottenere un valore di precisione maggiore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.