Pergunta sobre type-conversion, floating-point, string, c#, .net – Convertendo String para Flutuar em C #

81

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

Convert.ToSingle("41.00027357629127");

ou

float.Parse("41.00027357629127");

Esses métodos retornam4,10002732E + 15.

Quando eu converter para flutuar quero "41.00027357629127". Essa string deve ser a mesma ...

Como você sabe o que é convertido - é assim que você está exibindo o número Mark
41.00027357629127 não deve ser 4.10002732E + 15 em notação científica, a não ser, é claro, que sua cultura use vírgula decimal em vez de decimal (e ponto como separador de milhares), portanto o número realmente seria: 4100027357629127 ser exibido como 4.10002732E + 15 ljgww
Alguma idéia porque seu ToSingle? E não ToFloat? R2D2

Sua resposta

7   a resposta
0

lor de precisão.

186

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

Tente usar isso:

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

Observe, no entanto, que um float não pode conter muitos dígitos de precisão. Você teria que usar o dobro ou decimal para fazer isso.

não esqueça de adicionar o namespaceusing System.Globalization; acessarCultureInfo Mobiletainment
1

Você podedouble.Parse("41.00027357629127");

eu estou cansado, mas eu não Mehmet
Eu não acho que ele esteja perguntando como arredondar isso. O. R. Mapper
10

Você pode usar o seguinte:

float asd = (float) Convert.ToDouble("41.00027357629127");
Por favor, forneça algum contexto sobre por que esta é a resposta correta. Bas Peeters
7

Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentação

Isso não altera o tipo de dados de float para double? OP queria flutuar. Coding hierarchy
4

A precisão deflutuador tem 7 dígitos. Se você quiser manter todo o lote, você precisa usar oem dobro tipo que mantém 15-16 dígitos. Quanto à formatação, veja um post sobreformatação de duplas. E você precisa se preocuparsobre separadores decimais em c #.

Isso soa como o '. caractere não é o separador decimal em sua localidade? Confirastackoverflow.com/questions/3870154/c-sharp-decimal-separator jpe
Eu estou cansado de casal.Parse ele retorna 4100027357629127.0 é muito ruim Mehmet
21

Primeiro, é apenas umapresentação dofloat número que você vê no depurador. oreal O valor é aproximadamente exato (tanto quanto possível).

Nota: Usesempre CultureInfo informações 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 o meu CultureInfo? Estou na Turquia, onde irei adicionar o TR-TR? Mehmet
@Mehmetnew System.Globalization.CultureInfo("tr-TR") sshow

Perguntas relacionadas