2012-06-26 21 views
64

Estoy convirtiendo una cadena como "41.00027357629127", y estoy usando;Convirtiendo String To Float en C#

Convert.ToSingle("41.00027357629127"); 

o

float.Parse("41.00027357629127"); 

Estos métodos devuelven 4.10002732E + 15.

Cuando convierto en flotador quiero "41.00027357629127". Esta cadena debe ser el mismo ...

+1

¿Cómo sabes a qué se convierte? Así es como se muestra el número – Mark

+0

¿Alguna idea de por qué es ToSingle? Y no To Flotar? – R2D2

Respuesta

142

La configuración regional de su secuencia se establece en una en la que la marca decimal es "," en lugar de ".".

Pruebe con esto:

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

Tenga en cuenta, sin embargo, que un flotador no puede sostener que muchos dígitos de precisión. Tendría que usar doble o decimal para hacerlo.

+16

no se olvide de agregar el espacio de nombres 'usando System.Globalization;' para acceder a 'CultureInfo' – Mobiletainment

1

Puede double.Parse("41.00027357629127");

+0

No creo que esté preguntando cómo redondearlo. –

+0

ı cansado pero no – Mehmet

4

La precisión de float es de 7 dígitos. Si desea conservar todo el lote, debe utilizar el tipo double que conserva entre 15 y 16 dígitos. Con respecto al formateo, mira una publicación sobre formatting doubles. Y debe preocuparse about decimal separators in C#.

+0

ı cansado doble.Parece que devuelve 4100027357629127.0 es una lástima – Mehmet

+1

Esto suena como el '.' el carácter no es el separador decimal en tu localidad? Consulte http://stackoverflow.com/questions/3870154/c-sharp-decimal-separator – jpe

7

Uso Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentation

+1

¿Esto no cambia el tipo de datos de float a double? OP quería flotar. –

18

En primer lugar, es sólo una presentación del número float que se ve en el depurador. El valor real es aproximadamente exacto (tanto como sea posible).

Nota: Utilice siempreCultureInfo información cuando se trata de números de coma flotante frente a cadenas.

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

Esto es solo un ejemplo; elige una cultura apropiada para tu caso.

+0

¿cómo puedo elegir mi CultureInfo? Estoy en Turquía donde agregaré TR-TR? – Mehmet

+1

@Mehmet 'new System.Globalization.CultureInfo (" tr-TR ")' – sshow

0

Puede usar el análisis con doble en lugar de flotar para obtener más precisión.

7

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

+3

Proporcione un contexto de por qué este es el respuesta correcta. –