Usuário com melhor resposta
Me ajudem: Cálculo Coplexo

Pergunta
-
Bom galera eu estou com um problema de calculo e acredito que os experts neste fórum podem me ajudar. Eu fiz um programa que realiza cálculos e nele tem uma função de converter minutos em horas, assim, eu coloquei a função "double Con = Min / 60" o calculo é executado mas meu problema é com os decimais. Exemplo: 200 minutos pela função "Min / 60" o resultado seria o seguinte 3, 33 porem o ,33 não quer dizer 33 min mas 33% de 1 hora que seria 20 min. Então eu quero saber se é possível (se for possível postem um exemplo por favor) fazer um código que separe esses decimais e os calcule. Exemplo: 200 min "Min / 60" = 200 / 60 = 3,33 e depois "X * 60" 0,33 * 60 = 20 (onde X é somente os decimais descartando o numero inteiro).
Ps: A função "Min" é o numero que o usuário coloca no textBox então é uma variável e não apresenta problemas.
Pss: Só para reforçar o que eu quero é que a função "X" tenha o valor decimal seguindo o calculo "Con"( Con = Min / 60). Exemplo: se "Con" for igual a 1.2, "X" seria 0.2, se "Con" for igual a 3.33, "X" seria igual a 0.33 e assim por diante.
Psss: Eu uso o Microsoft Visual C++ 2010 Express
Respostas
-
Agora ficou mais claro!
Estou sem compilador, porém, acredito que o código abaixo resolva seu problema:
int Minutes = Convert::ToInt32(textBoxMinutes->Text); textBoxresultado->Text = String::Format("{0}:{1}",(int)(Minutes / 60), (Minutes % 60));
Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications
- Editado Diego Cotini sábado, 29 de junho de 2013 01:03 correção
- Marcado como Resposta Eikeros quarta-feira, 6 de novembro de 2013 12:35
Todas as Respostas
-
Olá Eikeros,
Estou bem enferrujado no C++ e vou ver se consigo criar uma função dessa mais para frente. Mas para adiantar:
- Se quiser o valor em minutos e não em decimais, basta fazer o mod por 60, conforme "200 % 60";
- Se quiser o decimal, poderia utilizar "(200 % 60) / 60".
Isto resolveria seu problema de duas maneiras, mas conforme citei anteriormente, irei verificar posteriormente se tem outra maneira.
Abraços.
-
Olá Diego Couto usei o mod que você me passou mas acho que fiz algo errado olha o código como ficou:
double Con = (min % 60) /60;
dessa forma da problema:
Error 1 error C2296: '%' : illegal, left operand has type 'double'
Aguardo respostas.
Ps: Se quiser posto o código de calculo completo do .programa
-
Olá Eikeros,
Então, o uso do % é para tipo inteiro, com double não é possível, portanto, sua variável min tem que ser de tipo inteiro (ou ser convertida para tal).
Porém, você terá que fazer um cast para double, pois, caso contrário o resultado será zero (tinha me esquecido do detalhe. Segue exemplo:
int min = 200; (double)(min % 60) / 60;
Testei em uma aplicação console, conforme código abaixo e funcionou:
#include "stdafx.h" #include <string> using namespace System; int main(array<System::String ^> ^args) { int Minutes = 200; Console::WriteLine((double)(Minutes % 60) / 60); Console::ReadKey(); }
Acredito que agora resolva seu problema.
- Sugerido como Resposta Programar é viver quarta-feira, 29 de maio de 2013 17:10
- Marcado como Resposta Eikeros terça-feira, 5 de novembro de 2013 09:35
- Não Marcado como Resposta Eikeros quarta-feira, 6 de novembro de 2013 12:35
-
-
Claro, no caso, coloquei fixo somente para teste, mesmo porque utilizei uma aplicação console e provavelmente não é o que está utilizando.
Neste caso, você só terá pegar o valor que o usuário informou (não sei se está utilizando um texbox, por exemplo) e converter para inteiro.
Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications
-
Bem eu estou usando texbox então eu queria saber se ficaria na seguinte ordem:
1-Converter os dados do textbox
double Minutes = Convert::ToDouble(textBoxMinutes->Text);
2- Aplicar o calculo
double min = (Minutes % 60) / 60;
3- Expressar os resultados
textBoxresultado->Text = String::Format("{0:0.00}",min);
é isso que devo fazer?
-
Caro,
Conforme seu último comentário, fiquei um pouco confuso e li novamente a sua pergunta (fiquei um pouco mais confuso... rs), conforme minha primeira resposta (vide abaixo), qual o resultado que você pretende?
- Se quiser o valor em minutos e não em decimais, basta fazer o mod por 60, conforme "200 % 60";
Exemplo: usuário informou 200, resultado será 20;- Se quiser o decimal, poderia utilizar "(200 % 60) / 60".
Exemplo: usuário informou 200, resultado será 0,33333;
E qual seria a formatação final a ser exibida para o usuário?Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications
-
Desculpe-me por falar confusamente, este é o código da função no meu programa:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { double Minutes = Convert::ToDouble(textBoxMinutes->Text); double min = Minutes / 60; textBoxresultado->Text = String::Format("{0:0.00}",min);
}
Onde Minutes é uma variável adicionada pelo o usuário (tipo no textbox o usuário coloca 100, 200 ...)
"min" é o nome que se da a função: Minutes (que é a variável) / 60 (valor fixo). E a ultima linha é a função printf/string ( que serve pra expressar em outro textbox ( textBoxresultado) o valor adquiro de Minutes / 60). Porém nessa função tem um problema, por exemplo, "Minutes / 60" (onde o usuário colocou no texbox 200 então Minutes é = 200) assim ficaria 200 / 60 = 3,33 o problema é que 0,33 não corresponde a 33 minutos mas sim a 33% de 1 hora e é isso que eu quero, um calculo que pegue o 0,33 (ou qualquer decimal) e o calcule, exemplo 200/60 = 3,33| primeira parte| 0,33 (separado do 3) x 60 (valor fixo) = 20 minutos. Assim o resultado seria 3 horas que foi o primeiro calculo e 20 minutos que foi o segundo calculo.
-
Agora ficou mais claro!
Estou sem compilador, porém, acredito que o código abaixo resolva seu problema:
int Minutes = Convert::ToInt32(textBoxMinutes->Text); textBoxresultado->Text = String::Format("{0}:{1}",(int)(Minutes / 60), (Minutes % 60));
Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications
- Editado Diego Cotini sábado, 29 de junho de 2013 01:03 correção
- Marcado como Resposta Eikeros quarta-feira, 6 de novembro de 2013 12:35