Qual è il modo migliore per convertire un doublein un int? Dovrebbe essere usato un cast?
etc.:)
Qual è il modo migliore per convertire un doublein 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.Floorecc - 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 doublea intnon genererà un'eccezione se il valore è al di fuori dell'intervallo di intin 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));
usingdirettive.
se usi il cast, cioè, (int)SomeDoubletroncerai la parte frazionaria. Cioè, se SomeDoublefossero 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 Convertclasse 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