TransWikia.com

Converter double para string mantendo o mesmo formato

Stack Overflow em Português Asked by Mik3i4a5 on November 27, 2021

Eu preciso converter uma valor do tipo double para string em C#, sem que esse valor seja alterado para notação científica.

o meu código é:

double valor1 = 0.000024746578864525161;

string resultado = Convert.toString(valor1);

a minha saída fica: 2,8192381923E-15

eu queria que a saída fosse exatamente a mesma mais em string

saída : “0.000024746578864525161”;

as razões pelas quais eu preciso que o valor não seja expresso em notação científica são:

1 – Eu estou lendo um XLSX.

2 – Estou fazendo a validação dos valores inseridos pelo usuário. E nessa validação, não posso permitir caracteres inválidos.

3 – Minha string é submetida a um Regex.

Regex(@"[;!*#&@?()'$~^<>ºª%{}A-Za-z]");

4 – O Fato do meu Regex não aceitar caracteres faz com que o número expresso em notação 2,8192381923E-15 torne-se inválido.

Existe uma forma de fazer a conversão de:

 double varlor = 0.000024746578864525161;

para

string resultado = "0.000024746578864525161"

e não para notação científica:

string resultado = "2,8192381923E-15"

One Answer

Não é possível fazer exatamente assim, mas algo próximo, pode formar assim:

valor1.ToString("#########0.000000000000000000000000")

Coloquei no GitHub para referência futura.

Vai notar que não pega todos os dígitos possíveis, não importa quantas casas coloca. O tipo double tem exatidão limitada. Se quer mais exatidão deveria usar um decimal. Pode por 339 casas, sei lá porque fazer isto, e não terá resultado mais exato. Faça o teste e verá que vai até o 0.0000247465788645252.

Se quer precisão maior aí deve abrir mão da exatidão e a notação científica é adequada.

O Excel trabalha bem com notação científica. Se não é isso que deseja, o problema parece ser outro.

Não confunda o número com representação numérica. Quando converte para string está abandonando o número e pegando a sua representação, que são coisas diferentes.

Claro, pode fazer uma conversão manual, mas dá bastante trabalho e não é fácil fazer certo.

Talvez queria fazer outra coisa, mas não temos como saber pela pergunta. Se o conceito estiver errado qualquer resposta técnica será ruim.

Answered by Maniero on November 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP