Pergunta

Eu preciso comparar a parte inteira de duas duplas para a desigualdade e atualmente estou fazendo isso:

int iA = (int)dA;
int iB = (int)dB;

if( iA != iB )
{
    ...
}

mas eu me pergunto se não há uma abordagem melhor do que este.

Graças.

Se eu usei Math.Truncate () em vez de um elenco para int, ainda seria preciso comparar os valores duplas dois resultantes de igualdade?

Sobre os comentários notação húngara:

Eu nunca uso HN-me, pelo menos não da maneira mais pessoas fazem. Mas este é um desses raros casos em que a semântica de uma variável relaciona diretamente para seu tipo. Eu poderia ter escolhido outra sintaxe como A_As_Integer e B_As_NonInteger mas o que teria sido a diferença então?

Foi útil?

Solução

Use Math.Truncate () ou seja

if (Math.Truncate(x) == Math.Truncate(y))

[Edit] percebeu que, se você está comparando as peças inteiras de duplas, lançando para valores int primeiro corre o risco de transbordamentos devem seus duplos estar fora do alcance que pode ser representado como int.

retornos Truncar qualquer um decimal ou uma dupla, evitando esta questão.

Outras dicas

Sim, isso é melhor abordagem.

Assumindo a partir de sua redação em você pergunta você não é preocupado com arredondamento ... apenas a parte integerr si.

ie. (Int) 4,1 dará o mesmo resultado que (int) 4.9

Como Ovídio afirmou, se você só precisa as variáveis ??para a comparação, então você só vai precisar para lançar as duplas na declaração de comparação. Eu estava olhando apenas para a teoria.

Pessoalmente, eu tento evitar a criação de variáveis ??extras a menos que eu precisar deles.

if ( (int)dA != (int)dB ) {
    ...
}

Como evolui de código ao longo do tempo, tendo variáveis ??extras pendurados em torno de nenhuma pista propósito de confusão. Claro, se você precisa dessas variáveis, isso é outra questão:)

Nota lateral: você parece estar tentando sugerir o tipo de dados através de uma notação húngara simples. Posso recomendar não fazer isso? Se você deve prefixar informações para suas variáveis, tentar prefixar o que a variável é para, ao invés de seu tipo. Se você fizer isso, os erros no código pode ser mais fácil de ver:

if ( (int)ageA != (int)idB ) {
    ...
}

Neste caso, mesmo sem saber o que os dados são, vendo que você está tentando comparar um 'idade' com um 'id' é um bom indício de que algo está errado aqui.

Eu concordo que truncar é o que você quer.

Algumas informações úteis a partir MSDN :

truncar retorna o número que permanece após quaisquer dígitos fracionários foram descartados.

É arredonda para o número inteiro mais próximo a zero.

double floatNumber;

floatNumber = 32.7865;
// Displays 32      
Console.WriteLine(Math.Truncate(floatNumber));

floatNumber = -32.9012;
// Displays -32       
Console.WriteLine(Math.Truncate(floatNumber));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top