Preciso obter o valor inteiro do lado esquerdo de um decimal ou duplo. Por Ex: preciso obter o valor 4 de 4,6. Tentei usar a função Math.Floor mas está retornando um valor duplo, por exemplo: está retornando 4.0 de 4.6. A documentação do MSDN diz que ele retorna um valor inteiro. Estou faltando alguma coisa aqui? Ou existe uma maneira diferente de conseguir o que procuro?
103
Respostas:
O intervalo de
double
é muito mais amplo do que o intervalo deint
oulong
. Considere este código:O número inteiro está fora da faixa de
long
- então o que você espera que aconteça?Normalmente, você sabe que o valor realmente estará dentro do intervalo de
int
oulong
, então você o converte:mas a responsabilidade por esse elenco recai sobre o desenvolvedor, não sobre
Math.Floor
si mesmo. Teria sido desnecessariamente restritivo fazê-lo falhar apenas com uma exceção para todos os valores fora do intervalo delong
.fonte
De acordo com o MSDN, Math.Floor (double) retorna um duplo: http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx
Se você quiser como um int:
Posso ver como o artigo do MSDN pode ser enganoso, eles deveriam ter especificado que, embora o resultado seja um "inteiro" (neste caso, significando um número inteiro), ele ainda é do TIPO duplo
fonte
int
( answers.com/integer ) - inteiros podem ser armazenados emDouble
(veja a resposta de Jon), e há um número infinito de inteiros que não podem ser armazenados em umint
.int
(nome de um tipo).Se você só precisa da parte inteira de um número, converta o número em um
int
. Isso truncará o número na casa decimal.fonte
int
se comporta de maneira diferenteFloor
, para números negativos.Floor
sempre truncará para o número mais negativo, enquanto a conversão paraint
truncará em direção a 0.Está correto. Olhando para a declaração, Math.Floor (double) produz um double (consulte http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx ). Presumo que por "inteiro" eles significam "número inteiro".
fonte
Floor deixa-o como um duplo para que você possa fazer mais cálculos duplos com ele. Se você quiser isso como um int, lance o resultado de floor como um int. Não lance o duplo original como um inteiro porque as regras para o piso são diferentes (IIRC) para números negativos.
fonte
Isso lhe dará o valor exato que você deseja, se você pegá-
4.6
lo4
como saída.fonte