Ir para conteúdo

POWERED BY:

Arquivado

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

sublyer

[Resolvido] Conversão de tipos

Recommended Posts

Olá, galera estou com um problemão com um número muito grande, resultante de uma divisão.

 

long teste = (1568 / 30588);

 

todos os tipos de dados númericos e até a conversão pra string retornam 0 sempre.

 

Como faço para guardar um número dessa escabilidade no C#?

 

Obrigado por quem puder me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo... vlwwwwww

 

Mas falae, que bug é esse do .NET heim.. rs

 

Flwww, grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é bug....é matemática. ;)

 

Como você está dividindo somente inteiros, ele não resulta em um float (ponto flutuante). Para resultar em um float (decimal, float, etc), ao menos um dos números precisaria ser um ponto flutuante (float).

 

Exemplo:

 

 

static void Main(string[] args)
{
	Double var1 = 1256 / 4568;
	Double var2 = (Double)1256 / 4568;
	Double var3 = Convert.ToDouble(1256) / Convert.ToDouble(4568);
	Double var4 = Convert.ToDouble(1256 / 4568);
	Double var5 = 1256.0 / 4568.0;

	Console.WriteLine("var1= " + var1);
	Console.WriteLine("var2= " + var2);
	Console.WriteLine("var3= " + var3);
	Console.WriteLine("var4= " + var4);
	Console.WriteLine("var5= " + var5);

	Console.Read();
}

O resultado é:

 

var1= 0

var2= 0,274956217162872

var3= 0,274956217162872

var4= 0

var5= 0,274956217162872

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta, dexa eu ver se entendi.

 

Em uma divisão de inteiros que resultem em um ponto flutuante(em qualquer calculadora normal) o .NET não retorna o valor como 0.

 

Pois executando o cálculo 1256 / 4568 em uma calculadora normal, como a do windows obtemos o valor 0,27495621716287215411558669001751.

 

Entendeu minha dúvida?

 

Flwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que long é um inteiro (assim como int, porém maior), então nunca vai guardar um valor de ponto flutuante.

 

Abraços,

 

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo, mas tente executar este mesmo exemplo que coloquei só que adicionando o valor calculado para uma variavel do tipo object, que é tipo mais genérico do .NET.

 

Flwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente o que o Graymalkin disse também é um problema, me atentei a só um dos fatos.

 

A questão é como lhe disse, se a divisão é somente de inteiros, ele assume que o resultado também será um inteiro. Esse também é o comportamento no C++, portanto isso é antigo.

 

Quanto à calculadora, como ela pode trabalhar com valores de alta precisão e com ponto flutuante, por padrão ela já utiliza variáveis de tipos de ponto flutuante (double, decimal, float). Saca?

 

Citando uma referência:

The / operator performs integer division if both operands are integers, and performs floating point division otherwise. For example:

 

 

void main()

{

float a;

a=10/3;

printf("%f\n",a);

}

This code prints out a floating point value since a is declared as type float, but a will be 3.0 because the code performed an integer division.

http://computer.howstuffworks.com/c11.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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