Como converter uma String em Double?

1. Como converter uma String em Double?

Vitor
Bigshow2015

(usa Ubuntu)

Enviado em 10/06/2020 - 04:05h

Galera, eu tenho pesquisado algumas formas de converter uma string em double, mas todas elas parecem falhar... As vezes, não completamente, mas no geral falham.
Vou colocar como exemplo, uma função que está presente em um dos meus códigos que estou implementando no momento. Essa foia a que chegou mais próximo do resultado esperado:

double toDouble(char* str)
{
double result = 0.00;
result = strtod(str, NULL);

return result;
}


Bom, o retorno dessa função me retorna um valor preciso até antes do "." na string. Após o ".", sai apenas uma casa decimal e ainda com o valor errado.

Se alguém puder me mostrar uma forma de retirar valores, como por exemplo "99999.99", de uma string e converte-los para double, eu ficaria muito grato!


  


2. Re: Como converter uma String em Double?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/06/2020 - 06:51h

Não parece haver nada errado com a função.

Como você a está chamando, e como está imprimindo os resultados? Que valores você usou como entrada, e o que exatamente saiu impresso? Você está usando o separador de decimais correto, de acordo com a locale usada pelo programa?


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


3. Re: Como converter uma String em Double?

Vitor
Bigshow2015

(usa Ubuntu)

Enviado em 11/06/2020 - 07:36h

paulo1205 escreveu:

Não parece haver nada errado com a função.

Como você a está chamando, e como está imprimindo os resultados? Que valores você usou como entrada, e o que exatamente saiu impresso? Você está usando o separador de decimais correto, de acordo com a locale usada pelo programa?


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


A entrada é "10158.34". Eu andei pesquisando, e descobri que esse tipo de valor não pode ser impresso com precisão... Ainda não entendi muito bem o motivo, mas não tem como. A saída sempre é: "10158.3", ignorando o ultimo valor - "4".

Bom, existe uma forma de printar o resultado esperado, basta adicionar no "std::cout" a função "std::setprecision(n)" da biblioteca "<iomanip>". O problema é que essa função serve apenas para prints, caso eu faça alguma operação com o valor "10158.34" por exemplo, o valor vem com o errinho de precisão.

Ex.:


#include <iostream>
#include <iomanip>

using namespace std;

int main ()
{
double value = 10158.34;
double result = (value * 0.002) + 0.24;

cout << "Valor sem ajustar a precisão no print = " << result << endl;
cout << "Valor ajustando a precisão no print = " << setprecision(10) << result << endl;

return 0;
}


Saída:

Valor sem ajustar a precisão no print = 20.5567
Valor ajustando a precisão no print = 20.55668

...

Bom, isso pode não parecer muito, mas esse arredondamento pode atrapalhar as vezes, e eu não sei como ajustar essa precisão "fora do print".
Se souber como resolve esse problema, agradeceria muitíssimo. Abraço.




4. Re: Como converter uma String em Double?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/06/2020 - 20:20h

Há dois tópicos passados em que eu falo acerca d problema que você está passando: https://www.vivaolinux.com.br/topico/C-C++/Funcao-atof e https://www.vivaolinux.com.br/topico/C-C++/Duvida-iniciante-3.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts