Convertendo String em Float em C #


108

Estou convertendo uma string como "41.00027357629127" e estou usando;

Convert.ToSingle("41.00027357629127");

ou

float.Parse("41.00027357629127");

Esses métodos retornam 4,10002732E + 15 .

Quando eu converter para float, quero "41.00027357629127". Esta string deve ser a mesma ...


1
Como você sabe para o qual é convertido - é assim que você está exibindo o número
mmmmmm

1
Alguma ideia de por que é ToSingle? E não ToFloat?
Lord Darth Vader de

41.00027357629127 não deve ser 4.10002732E + 15 em notação científica, a menos que é claro que sua cultura use vírgula decimal em vez de ponto decimal (e ponto como separador de milhares), então o número seria realmente lido: 4100027357629127 consequentemente se tornaria exibido como 4.10002732E + 15
ljgww

Respostas:


229

A localidade do seu segmento é definida como aquela em que a marca decimal é "," em vez de ".".

Tente usar este:

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

Observe, entretanto, que um float não pode conter tantos dígitos de precisão. Você teria que usar double ou decimal para fazer isso.


35
não se esqueça de adicionar o namespace using System.Globalization;para acessarCultureInfo
Mobiletainment

24

Primeiro, é apenas uma apresentação do floatnúmero que você vê no depurador. O valor real é aproximadamente exato (tanto quanto possível).

Nota: Use sempre informações de CultureInfo ao lidar com números de ponto flutuante versus strings.

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

Este é apenas um exemplo; escolha uma cultura apropriada para o seu caso.


como posso escolher meu CultureInfo? Estou na turquia, onde vou adicionar TR-TR?
Mehmet

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

20

Você pode usar o seguinte:

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

4
Forneça algum contexto sobre por que essa é a resposta certa.
Bas Peeters


4

A precisão do float é de 7 dígitos. Se você deseja manter o lote inteiro, você precisa usar o tipo duplo que mantém 15-16 dígitos. Com relação à formatação, dê uma olhada em um post sobre formatação de duplas . E você precisa se preocupar com separadores decimais em C # .


eu cansei em dobro. Em par, ele retorna 4100027357629127.0 é muito ruim
Mehmet

2
Isso soa como o '.' caractere não é o separador decimal em sua localidade? Confira stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe

0

Você pode double.Parse("41.00027357629127");


Não acho que ele esteja perguntando como contornar isso.
OR Mapper

-2

Você pode usar a análise com double em vez de float para obter mais valor de precisão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.