Qual é a melhor maneira de converter um double
para um int
? Um elenco deve ser usado?
etc.
:)
Qual é a melhor maneira de converter um double
para um int
? Um elenco deve ser usado?
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 de double
. Uma conversão de double
para int
não lançará uma exceção se o valor estiver fora do intervalo int
em um contexto não verificado, enquanto uma chamada para a Convert.ToInt32(double)
vontade. O resultado da conversão (em um contexto não verificado) é explicitamente indefinido se o valor estiver fora do intervalo.
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, se SomeDouble
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
Sim, porque não?
double someDouble = 12323.2;
int someInt = (int)someDouble;
Usar a Convert
classe também funciona bem.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
é a melhor maneira de converter
A melhor maneira é simplesmente usar Convert.ToInt32
. É rápido e também arredonda corretamente.
Por que torná-lo mais complicado?
Aqui está um exemplo completo
class Example
{
public static void Main()
{
double x, y;
int i;
x = 10.0;
y = 3.0;
// cast double to int, fractional component lost (Line to be replaced)
i = (int) (x / y);
Console.WriteLine("Integer outcome of x / y: " + i);
}
}
Se você deseja arredondar o número para o número inteiro mais próximo, faça o seguinte:
i = (int) Math.Round(x / y); // Line replaced
Meus caminhos são:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
double_value = 0.1
label8.Text = "" + years.ToString("00") + " years";
quando você deseja enviá-lo para uma etiqueta, ou algo assim, e você não deseja nenhum componente fracionário, esta é a melhor maneira
label8.Text = "" + years.ToString("00.00") + " years";
se você quiser com apenas 2, e é sempre assim