[AJUDA] COMO LER VARIAVEL COM CASA DECIMAL EM LIGUAGEM C

1. [AJUDA] COMO LER VARIAVEL COM CASA DECIMAL EM LIGUAGEM C

pedro vitor
pedronardoni

(usa Ubuntu)

Enviado em 18/03/2017 - 19:37h

Boa noite, pessoal!
Alguem sabe como é a formatação para ler uma variavel do tipo float ou double com uma casa decimal em linguagem C??

Eu sei que pra ler normalmente é:
scanf ("%f", &variavel); 



  


2. Re: [AJUDA] COMO LER VARIAVEL COM CASA DECIMAL EM LIGUAGEM C

Anderson
AndersonCezar

(usa Linux Mint)

Enviado em 18/03/2017 - 20:20h

pedronardoni escreveu:

Boa noite, pessoal!
Alguem sabe como é a formatação para ler uma variavel do tipo float ou double com uma casa decimal em linguagem C??

Eu sei que pra ler normalmente é:
scanf ("%f", &variavel); 



printf("%.1f", variavel);

Onde valor após o ponto é a quantidade de casas decimais e 'f' tipo da variável.




3. Re: [AJUDA] COMO LER VARIAVEL COM CASA DECIMAL EM LIGUAGEM C

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 18/03/2017 - 20:20h

Essa tabela pode ser obtida através do comando
$man scanf

Existem sites com essa tabela, inclusive, a Wikipédia: https://en.wikipedia.org/wiki/Scanf_format_string


+----------+---------------------+
|specifier | description |
+----------+---------------------+
|i |integer |
|d,u |decimal integer |
|o |octal integer |
|x |hexadecimal integer |
|f,e,g,a |floating point number|
|ld |double " " " |
|c |character |
|s |string of characters |
|p |pointer address |
+----------+---------------------+


Logo, você lê:

float:
float number;
scanf("%f", &number);


double:
double number;
scanf("%lf", &number);




4. Re: [AJUDA] COMO LER VARIAVEL COM CASA DECIMAL EM LIGUAGEM C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/03/2017 - 11:27h

Com scanf(), você não tem como limitar a precisão na hora de ler -- o máximo que pode fazer é limitar a quantidade total de caracteres que formam o número. Essa quantidade pode ser difícil de prever, especialmente quando se está interagindo com um usuário.

Para fazer o que você quer, você terá de fazer o trabalho por conta própria.

Um caminho possível é com preprocessamento: ler como string e fazer manipulações sobre ela antes de convertê-la em número. Seria o meio de ter o maior controle possível, mas possivelmente seria muito trabalhoso.

Outra possibilidade é com posprocessamento, no qual você converte o número diretamente, e depois faz contas com ele a fim de desprezar eventuais partes indesejadas. Segue um exemplo tosco de como poderia ser feito com posprocessamento.

float num, num_proc;
scanf("%f", &num);
num_proc=copysignf(floorf(fabsf(num)*10.f)/10.f, num);



Note porém que se você quiser eliminar problemas de exatidão do número na hora de ser expresso como decimal, nenhuma dessas abordagens deve funcionar. Nossos computadores trabalham com representação binária dos números de ponto flutuante, e a conversão de frações decimais para binário frequentemente produz dízimas, o que implica que uma representação exata é impossível.

Sabendo dessa impossibilidade, talvez você tenha de limitar o tanto de informação que você entrega ao usuário, a fim de que ele não perceba a imprecisão. Contudo, essa decisão depende do contexto: pode haver casos em que o usuário requeira o máximo de precisão possível, e em tais casos você provavelmente não deveria limitar o número de casas decimais apenas para esconder o efeito de truncamento das dízimas.


5. Re: [AJUDA] COMO LER VARIAVEL COM CASA DECIMAL EM LIGUAGEM C

pedro vitor
pedronardoni

(usa Ubuntu)

Enviado em 19/03/2017 - 17:04h

uilianries escreveu:

Essa tabela pode ser obtida através do comando
$man scanf

Existem sites com essa tabela, inclusive, a Wikipédia: https://en.wikipedia.org/wiki/Scanf_format_string


+----------+---------------------+
|specifier | description |
+----------+---------------------+
|i |integer |
|d,u |decimal integer |
|o |octal integer |
|x |hexadecimal integer |
|f,e,g,a |floating point number|
|ld |double " " " |
|c |character |
|s |string of characters |
|p |pointer address |
+----------+---------------------+


Logo, você lê:

float:
float number;
scanf("%f", &number);


double:
double number;
scanf("%lf", &number);



Muito obg, valeu!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts