Jump to content
TheOicle

Como pegar valor depois da virgula de um float

Recommended Posts

Eu quero pegar as 3 unidades depois da virgula.

 

Ex:  

float a = 897.098;



string b = 098;



cout<< b;

 

 

Acredito que voces entenderam com o exemplo acima. Nao pode haver arrays , tem que ser o mais simples possivel.

 

Agora, vou mostrar a minha tentativa:

 

#include<iostream>

using namespace std;

int main()
{
    float premio;
    cout<<"Digite o segundo numero: ";
    cin>>premio;
    cin.ignore();

    float a = float(premio) % int(premio); //Da um erro por causa do mod
    
    ou

    float a = float(premio) - int(premio); //
    
    cout<<a;

    return 1;
}

 

 

Share this post


Link to post
Share on other sites

O operador de modulo(%) só realizada operações com inteiros.

 

Na sua situação você pode utilizar a função fmod(http://www.cplusplus.com/reference/cmath/fmod/) disponível no cabeçalho cmath.

float a = fmod(premio, 1);

Ou utilizar sua segunda alternativa mesmo.

float a = premio - int(premio);

 

Se quiser recuperar a fração como um inteiro basta multiplicá-la por 10 elevado ao numero de casas decimais relevantes.

image.png.77b94246c86b736e96981bbbe6b6426f.png

 

int f = a * pow(10, 3); 
//ou 
int f = a * 1000;

O detalhe é que você deve especificar a quantidade de casas relevantes.

Share this post


Link to post
Share on other sites

Obrigado!

 

Minha intencao era aquele float (do exemplo..) com um limite de 3 unidades depois da virgula. Eu ja tinha tentado antes calcular usando o *1000 mais só dava duas unidades depois da virgula mesmo. Tipo o seu exemplo. 

 

Usei o fmod e consegui. Sinceramente, eu não conhecia o fmod. 

 

Mas eu ainda não sei, veja minha duvida no proprio codigo.

 

#include<iostream>
#include<cmath>
#include<iomanip>

using namespace std;

int main()
{
    float numero = 54.098;

    float resto_do_numero = fmod(numero,int(numero));
    
    int pega_resto = resto_do_numero; // Como eu transformo essa varivel em inteiro???

    //cout<<setprecision(3)<<fixed;
    //cout<<resto_do_numero;

    return 1;
}

 

Share this post


Link to post
Share on other sites

Só vai dar 2 duas unidades pois o zero a esquerda é insignificante e não é representado.

 

Mas se você quiser imprimir zeros a esquerda pode fazer o seguinte.

int pega_resto = resto_do_numero * 1000;

cout << setfill('0') << setw(3) << pega_resto;

 

setfill('0') define o caractere a ser usado para completar o tamanho informado por setw(3) que define o tamanho como sendo 3.

Share this post


Link to post
Share on other sites

Saiu como esperado...Valeu pela paciencia. Só nao sei como marcar o topico como concluido. 

/*
    Variaveis e entrada

A LBV fez um sorteio cujos bilhetes continham números de 6 dígitos.
O sorteio foi baseado nos dois primeiros prêmios da loteria federal,
sendo o número sorteado formado pelos três últimos dígitos do primeiro
e do segundo prêmio. Por exemplo, se o primeiro prêmio fosse 34.582 e o
segundo 54.098, o número da LBV seria 582.098. Escreva um programa que
lê os dois prêmios e retorna o número sorteado. 
*/

#include<iostream>
#include<cmath>
#include<iomanip>

using namespace std;

int main()
{
    float numero1;
    cout<<"Digite: ";
    cin>>numero1;		//34.582
    cin.ignore();

    float numero2;
    cout<<"Digite: ";
    cin>>numero2;		//54.098
    cin.ignore();

    //pega a parte fracionaria do numeros
    float pega_resto_do_numero1 = fmod(numero1,int(numero1));
    float pega_resto_do_numero2 = fmod(numero2,int(numero2));

    //transforma a parte fracionaria em
    //um inteiro para melhor visualizacao.
    int a = pega_resto_do_numero1 * 1000;
    int b = pega_resto_do_numero2 * 1000;

    cout<<"Resultado final: "<<a<<"."<<setfill('0')<<setw(3)<<b; //Resultado final: 582.097

    return 1;
}

 

  • Gostei 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luciano
      Boa noite pessoal alguém poderia me ajudar por favor,
      gostaria de pagar o valor da função random e colocar na imagem.
      -----função-----
      <p id="demo"></p>
      <script>
      document.getElementById("demo").innerHTML =
      Math.floor((Math.random() * 22) + 1);        
      </script>
      ----------
       <img src="imagens/('#demo').jpg" alt="Card">
       
      Eu ja tentei:
      ('#demo')
      '#demo'
      "#demo"
      Nada funciona.
       
      Por favor me dem uma luz, não manjo de java
      Obrigado
    • By aegospm
      Olá, amigos.  Eu tenho um array ($array) que foi gerado automaticamente no meu código e seu retorno é este:
      Array ( [0] => Array ( [em] => 0.017142857142857 [vítimas] => 0.017142857142857 [na] => 0.017142857142857 [mulheres] => 0.017142857142857 [criança] => 0.011428571428571 [jovem] => 0.011428571428571 [o] => 0.011428571428571 [nada.] => 0.011428571428571 [morreram] => 0.011428571428571 [hora.] => 0.011428571428571 ) [1] => Array ( [e] => 0.024096385542169 [O] => 0.018072289156627 [anos,] => 0.018072289156627 [do] => 0.018072289156627 [sem] => 0.012048192771084 [atiraram] => 0.012048192771084 [levar] => 0.012048192771084 [Amarante,] => 0.012048192771084 [Natal.] => 0.012048192771084 [com] => 0.012048192771084 ) [2] => Array ( [e] => 0.021276595744681 [de] => 0.021276595744681 [As] => 0.015957446808511 [do] => 0.015957446808511 [um] => 0.015957446808511 [uma] => 0.015957446808511 [Duas] => 0.01063829787234 [identificado] => 0.01063829787234 [cinco] => 0.01063829787234 [18] => 0.01063829787234 ) [3] => Array ( [acordo] => 0.014084507042254 [até] => 0.014084507042254 [De] => 0.014084507042254 [Nascimento,] => 0.014084507042254 [os] => 0.014084507042254 [com] => 0.014084507042254 [na] => 0.014084507042254 [branco,] => 0.0070422535211268 [carro] => 0.0070422535211268 [em] => 0.0070422535211268 ) [4] => Array ( [a] => 0.030769230769231 [de] => 0.025641025641026 [no] => 0.020512820512821 [foi] => 0.015384615384615 [Polícia] => 0.015384615384615 [o] => 0.015384615384615 [26] => 0.01025641025641 [Rodrigues] => 0.01025641025641 [Kelly] => 0.01025641025641 [cabeças] => 0.01025641025641 ) )  
      Eu tenho imprimir cada elemento assim:
      foreach ($array as $key => $value) { echo $key." => ".$value."<br/>"; } Obtenho como resultado o seguinte erro:
      Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array  Vi aqui como última solução, pois não consegui resolver. Já pesquisei bastante. Como faço para imprimir separadamente cada elemento de $array?
      Quero trabalhar com eles separadamente.
       
       
      Já resolvi... meu $array é um array de arrays. :)
    • By Rui PG
      Boa tarde, Pessoal"
       
      Sou iniciante em SQL, em uma tabela do nosso BD tempos um campo que possui o registro com as informações do paciente concatenado com uma serie de valores que não precisamos.
      Como eu faço, para montar uma select para extrair desse registro apenas o que está entre aspas?
       
      O meu registro está assim:
      a:28:{i:18;s:13:"Sérgio silva";i:19;s:11:"1199900001";i:20;s:0:"n/i";i:21;s:0:"n/i";i:23;s:15:"Amil One Health";i:24;s:0:"n/i";i:27;s:0:"n/i";i:31;s:1:"2";i:32;s:0:"n/i";i:33;s:1:"2";i:34;s:0:;}
       
      Eu preciso dele assim:
      "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";
       
      Observação, esses monte de valores a:28: ...etc... eles mudam, não são valores fixos, se fossem até usaria o replace, mas são vários valores.
       
      Depois que eu chegar nessa mineração: "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";
      Como eu faço para alocar cada valor em campo campo qualquer, pode ser uma tabela temporária, tipo assim:
       
      |nome           |campo 1        |Campo 2 |Campo 3 |Campo 4               |Campo  5 | .....
      |Sérgio silva|1199900001|n/i              |n/i              |Amil One Health|n/i               |n/i|2|n/i|2| .....
       
      Muito obrigado amigos
       
       
       
       
       
       
    • By Bobrinha
      Olá, estou com um probleminha e não estou achando uma solução amigável e agradeço desde de já qualquer ajuda.
       
      Bom ao usar o php com o file_get_contents e buscar a URL https://www.udemy.com/api-2.0/courses/2064455?fields[course]=title,headline,price ela me retorna o price ou seja o preço em dolar, no entanto se eu jogar essa URL no navegador diretamente ela retorna o valor em real.
       
      O mesmo acontece se eu jogar no jquery com ajax e puxar a url no meu pc e no servidor web o preço fica em dolar mais se jogar diretamente no navegador fica em real o valor 
       
      Alguém saberia por que? 
    • By Loconarrativo
      Bom, no meu form, eu peço para o cliente digitar um valor (esse valor em reais), mas para continuar eu preciso me certificar que a variável que contem o valor, tenha 16 dígitos ao total, então se a pessoa digita uma 1000.00, eu preciso completar com 9 zeros a esquerda (fica assim 0000000001000.00), para eu saber quantos dígitos tem na variável, eu faço
      $i = strlen( $_POST['valor']);   ai eu faço
      $u = 8 - $i ; eu tenho o numero de zeros que preciso colocar a esquerda, mas como eu transformo isso em vários zeros? 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.