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"
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP