Jaki jest najlepszy sposób konwersji a double
na int
? Czy należy użyć odlewu?
etc.
:)
Jaki jest najlepszy sposób konwersji a double
na int
? Czy należy użyć odlewu?
etc.
:)
Odpowiedzi:
Możesz użyć rzutowania, jeśli chcesz zachować domyślne zachowanie obcinania w kierunku zera. Alternatywnie, możesz użyć Math.Ceiling
, Math.Round
, Math.Floor
etc - choć nadal będziesz potrzebować obsady później.
Nie zapominaj, że zakres int
jest znacznie mniejszy niż zakres double
. Rzutowanie z double
do int
nie zgłosi wyjątku, jeśli wartość jest poza zakresem int
w niesprawdzonym kontekście, podczas gdy wywołanie Convert.ToInt32(double)
will. Wynik rzutowania (w niesprawdzonym kontekście) jest jawnie niezdefiniowany, jeśli wartość jest poza zakresem.
int
wynosi zawsze 32 bity, niezależnie od tego, czy używasz maszyny 32-bitowej, czy 64-bitowej.
intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
na początku pliku, w którym to momencie może to byćintVal = Convert.ToInt32(Math.Floor(dblVal));
using
dyrektyw.
jeśli używasz rzutowania, to znaczy, (int)SomeDouble
że obcinasz część ułamkową. To znaczy, gdyby SomeDouble
było 4,9999, wynikiem byłoby 4, a nie 5. Konwersja na wartość int nie zaokrągla liczby. Jeśli chcesz zaokrąglić, użyjMath.Round
Tak czemu nie?
double someDouble = 12323.2;
int someInt = (int)someDouble;
Korzystanie z Convert
klasy również działa dobrze.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
to najlepszy sposób na konwersję
Oto pełny przykład
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);
}
}
Jeśli chcesz zaokrąglić liczbę do najbliższej liczby całkowitej, wykonaj następujące czynności:
i = (int) Math.Round(x / y); // Line replaced
Moje sposoby to:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
double_value = 0.1