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

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

Matthew Watson
fonte
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.

Tigran
fonte
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");
user4292249
fonte
4
Forneça algum contexto sobre por que essa é a resposta certa.
Bas Peeters
7

Usar Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentação

Ozgur Dogus
fonte
2
Isso não muda o tipo de dados de float para double? OP queria flutuar.
Nell Martinez
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 # .

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

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

Aprendiz
fonte