Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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;
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por joaoluizbt
      Eu tenho um campo com vários itens separados por vírgula,

      Qtd
      UM
      Descrição
                     1,2                                 
                 caneta,papel          
      mas preciso que eles sejam exibidos no formulário um embaixo do outro.

      Qtd
      UM
      Descrição
           1 2                                 
      caneta
      papel          
      Existe alguma forma de fazer isso só com html?
       
      o meu código apenas aponta para o campo e a informação já vem assim separada com vírgula. Como alterar?
       
      <td style="width: 10.58%; padding: .75pt .75pt .75pt .75pt;" width="10%">
      <p class="MsoNormal">            {{db.field123}}           </p>
      </td>
       
    • Por quimera
      Bom/boa dia/tarde/noite, estou com um problema (nem notou neh?!):
       
      Estou fazendo uma extensão para preenchimento automático de login e formulário, em alguns sites funciona normalmente, mas existe uns sites que não permitem o preenchimento, e são eles que eu estou buscando auternativas.
       
      eu injeto o texto no input $("input[type=text]").val("Meu texto") mas quando fico observando o valor ou quando envio o formulário simplesmente diz que o input não tem valor (não foi preenchido) mesmo vendo o texto nele.
      O que pode ser?
      Que tipo de mandinga é essa?
      E o que posso fazer pra contornar?
    • Por 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
    • Por 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. :)
    • Por 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
       
       
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.