Conversión de cadenas para flotar en C #

108

Estoy convirtiendo una cadena como "41.00027357629127", y estoy usando;

Convert.ToSingle("41.00027357629127");

o

float.Parse("41.00027357629127");

Estos métodos devuelven 4.10002732E + 15 .

Cuando convierto a flotante quiero "41.00027357629127". Esta cadena debe ser la misma ...

Mehmet
fuente
1
¿Cómo sabe a qué se convierte? Así es como se muestra el número
Mmmmmm
1
¿Alguna idea de por qué es ToSingle? ¿Y no ToFloat?
Lord Darth Vader
41.00027357629127 no debe ser 4.10002732E + 15 en notación científica, a menos que, por supuesto, su cultura use una coma decimal en lugar de un punto decimal (y un punto como separador de miles), por lo que el número realmente se leería: 4100027357629127, en consecuencia, se mostrará como 4.10002732E + 15
ljgww

Respuestas:

229

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

Intente usar esto:

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

Sin embargo, tenga en cuenta que un flotador no puede contener tantos dígitos de precisión. Tendría que usar double o Decimal para hacerlo.

Matthew Watson
fuente
35
no olvide agregar el espacio using System.Globalization;de nombres para accederCultureInfo
Mobiletainment
24

Primero, es solo una presentación del floatnúmero que ve en el depurador. El valor real es aproximadamente exacto (tanto como sea posible).

Nota: Utilice siempre la información CultureInfo cuando se trata de números de punto flotante frente a cadenas.

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

Este es solo un ejemplo; elija una cultura adecuada para su caso.

Tigran
fuente
¿Cómo puedo elegir mi CultureInfo? Estoy en Turquía, ¿dónde agregaré TR-TR?
Mehmet
1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow
20

Puede utilizar lo siguiente:

float asd = (float) Convert.ToDouble("41.00027357629127");
usuario4292249
fuente
4
Proporcione un contexto sobre por qué esta es la respuesta correcta.
Bas Peeters
7

Utilizar Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentación

Ozgur Dogus
fuente
2
¿No cambia esto el tipo de datos de flotante a doble? OP quería flotar.
Nell Martinez
4

La precisión de flotación es de 7 dígitos. Si desea conservar el lote completo, debe utilizar el tipo doble que conserva entre 15 y 16 dígitos. Con respecto al formato, mire una publicación sobre el formato de dobles . Y debe preocuparse por los separadores decimales en C # .

jpe
fuente
Estoy cansado doble Paro devuelve 4100027357629127.0 es una lástima
Mehmet
2
Esto suena como el '.' carácter no es el separador decimal en su configuración regional? Consulte stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe
0

Usted puede double.Parse("41.00027357629127");

ABH
fuente
No creo que esté preguntando cómo redondearlo.
OR Mapper
-2

Puede utilizar el análisis sintáctico con double en lugar de float para obtener un valor de mayor precisión.

Aprendiz
fuente