Qual é a melhor maneira de converter um double
para um int
? Um elenco deve ser usado?
c#
.net
casting
type-conversion
user496949
fonte
fonte
etc.
:)Respostas:
Você pode usar uma conversão se desejar o comportamento padrão de truncar para zero. Alternativamente, você pode querer usar
Math.Ceiling
,Math.Round
,Math.Floor
etc - embora você ainda vai precisar de um elenco depois.Não esqueça que o alcance de
int
é muito menor que o alcance dedouble
. Uma conversão dedouble
paraint
não lançará uma exceção se o valor estiver fora do intervaloint
em um contexto não verificado, enquanto uma chamada para aConvert.ToInt32(double)
vontade. O resultado da conversão (em um contexto não verificado) é explicitamente indefinido se o valor estiver fora do intervalo.fonte
int
é sempre 32 bits, independentemente de você estar usando uma máquina de 32 ou 64 bits.intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
no topo do arquivo, em que ponto ele poderia ser apenasintVal = Convert.ToInt32(Math.Floor(dblVal));
using
diretrizes.se você usar elenco, ou seja,
(int)SomeDouble
você truncará a parte fracionária. Ou seja, seSomeDouble
fosse 4,9999, o resultado seria 4, e não 5. A conversão para int não arredonda o número. Se você deseja arredondar, useMath.Round
fonte
Sim, porque não?
Usar a
Convert
classe também funciona bem.fonte
Convert.ToInt32
é a melhor maneira de converterfonte
A melhor maneira é simplesmente usar
Convert.ToInt32
. É rápido e também arredonda corretamente.Por que torná-lo mais complicado?
fonte
Aqui está um exemplo completo
Se você deseja arredondar o número para o número inteiro mais próximo, faça o seguinte:
fonte
Eu acho que o melhor caminho é
Convert.ToInt32
.fonte
int myInt = (int) Math.Ceiling (myDouble);
fonte
Meus caminhos são:
fonte
double_value = 0.1
quando você deseja enviá-lo para uma etiqueta, ou algo assim, e você não deseja nenhum componente fracionário, esta é a melhor maneira
se você quiser com apenas 2, e é sempre assim
fonte