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 ...


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.


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.


¿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");

4
Proporcione un contexto sobre por qué esta es la respuesta correcta.
Bas Peeters


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 # .


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");


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.