Qual è il modo migliore per convertire un double
in un int
? Dovrebbe essere usato un cast?
etc.
:)
Qual è il modo migliore per convertire un double
in un int
? Dovrebbe essere usato un cast?
etc.
:)
Risposte:
È possibile utilizzare un cast se si desidera il comportamento troncato verso zero predefinito. In alternativa, si potrebbe desiderare di utilizzare Math.Ceiling
, Math.Round
, Math.Floor
ecc - anche se avrai ancora bisogno di un cast in seguito.
Non dimenticare che l'intervallo di int
è molto più piccolo dell'intervallo di double
. Un cast da double
a int
non genererà un'eccezione se il valore è al di fuori dell'intervallo di int
in un contesto non controllato, mentre una chiamata a Convert.ToInt32(double)
will. Il risultato del cast (in un contesto non controllato) è esplicitamente indefinito se il valore è al di fuori dell'intervallo.
int
è sempre di 32 bit, indipendentemente dal fatto che si stia utilizzando una macchina a 32 o 64 bit.
intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
in cima al file, a quel punto potrebbe essereintVal = Convert.ToInt32(Math.Floor(dblVal));
using
direttive.
se usi il cast, cioè, (int)SomeDouble
troncerai la parte frazionaria. Cioè, se SomeDouble
fossero 4.9999 il risultato sarebbe 4, non 5. La conversione in int non arrotonda il numero. Se vuoi arrotondare usaMath.Round
Sì, perché no?
double someDouble = 12323.2;
int someInt = (int)someDouble;
Anche l'uso della Convert
classe funziona bene.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
è il modo migliore per convertire
Ecco un esempio 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 si desidera arrotondare il numero al numero intero più vicino, procedere come segue:
i = (int) Math.Round(x / y); // Line replaced
I miei modi sono:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
double_value = 0.1