Jaki jest najlepszy sposób konwersji a doublena int? Czy należy użyć odlewu?
etc.:)
Jaki jest najlepszy sposób konwersji a doublena 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.Flooretc - choć nadal będziesz potrzebować obsady później.
Nie zapominaj, że zakres intjest znacznie mniejszy niż zakres double. Rzutowanie z doubledo intnie zgłosi wyjątku, jeśli wartość jest poza zakresem intw 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.
intwynosi 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));
usingdyrektyw.
jeśli używasz rzutowania, to znaczy, (int)SomeDoubleże obcinasz część ułamkową. To znaczy, gdyby SomeDoublebył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 Convertklasy 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