Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Język C# udostępnia zestaw typów liczb całkowitych i zmiennoprzecinkowych . Istnieje niejawna lub jawna konwersja między dowolnymi dwoma typami liczbowymi. Użyj wyrażenia rzutowania , aby wykonać jawną konwersję.
Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację funkcji w publicznej wersji zapoznawczej nadchodzącej wersji językowej.
Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.
Wskazówka
Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.
Niejawne konwersje liczbowe
W poniższej tabeli przedstawiono wstępnie zdefiniowane niejawne konwersje między wbudowanymi typami liczbowymi:
| Źródło | To |
|---|---|
| sbyte |
short, intlong, float, double, decimallubnint |
| bajtów |
short, ushortint, uintlongulongfloatdoubledecimalnintlubnuint |
| krótkie |
int, long, float, double, decimal lub nint |
int, uint, long, ulong, float, double, decimal, nint lub nuint |
|
| int |
long, float, double, decimallub nint |
| uint |
long, ulong, float, double, decimal lub nuint |
| długi |
float, double lub decimal |
| ulong |
float, double lub decimal |
| float | double |
| nint |
long, float, doublelub decimal |
| nuint |
ulong, float, doublelub decimal |
Uwaga / Notatka
Niejawne konwersje z int, , ulongnintlongfloatlongulongnuintnintuintlub z , lub nuint mogą spowodować double utratę dokładności, ale nigdy nie utratę wielkości. Inne niejawne konwersje liczbowe nigdy nie tracą żadnych informacji.
Należy również pamiętać, że
Każdy całkowity typ liczbowy jest niejawnie konwertowany na dowolny typ liczbowy zmiennoprzecinkowa.
Nie ma niejawnych konwersji na
bytetypy isbyte. Nie ma niejawnych konwersji zdoubletypów idecimal.Nie ma niejawnych konwersji między typem
decimala typamifloatlubdouble.Wartość wyrażenia stałego typu
int(na przykład wartość reprezentowana przez literał liczby całkowitej) może zostać niejawnie przekonwertowana nasbyte, ,byte,uintushortulongshortnintlubnuintjeśli znajduje się w zakresie typu docelowego:byte a = 13; byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Jeśli wartość stała nie mieści się w zakresie typu docelowego, wystąpi błąd kompilatora CS0031 .
Jawne konwersje liczbowe
W poniższej tabeli przedstawiono wstępnie zdefiniowane jawne konwersje między wbudowanymi typami liczbowymi, dla których nie ma niejawnej konwersji:
| Źródło | To |
|---|---|
| sbyte |
byte, ushort, uint, ulonglub nuint |
| bajtów | sbyte |
| krótkie |
sbyte, byte, ushort, uint, ulong lub nuint |
sbyte, byte lub short |
|
| int |
sbyte, byteshort, ushort, uint, ulonglubnuint |
| uint |
sbyte, byte, short, ushort, int lub nint |
| długi |
sbyte, byte, short, ushort, int, uint, ulong, nint lub nuint |
| ulong |
sbyte, byte, short, ushort, int, uint, long, nint lub nuint |
| float |
sbyte, byteshort, ushortintuintlongulongdecimalnintlubnuint |
| podwójny |
sbyte, byte, , short, ushortintuintlongulongfloatdecimalnintlubnuint |
| decimal |
sbyte, byte, , short, ushortintuintlongulongfloatdoublenintlubnuint |
| nint |
sbyte, byte, , short, ushortintuintulonglubnuint |
| nuint |
sbyte, byte, , short, ushortintuintlonglubnint |
Uwaga / Notatka
Jawna konwersja liczbowa może spowodować utratę danych lub zgłoszenie wyjątku, zazwyczaj .OverflowException
Należy również pamiętać, że:
Podczas konwertowania wartości typu całkowitego na inny typ całkowity wynik zależy od kontekstu sprawdzania przepełnienia. W zaznaczonym kontekście konwersja powiedzie się, jeśli wartość źródłowa mieści się w zakresie typu docelowego. W przeciwnym razie OverflowException zostanie wyrzucony. W niezweryfikowanym kontekście konwersja zawsze się powiedzie i odbywa się w następujący sposób:
- Jeśli typ źródła jest większy niż typ docelowy, wartość źródłowa jest obcięta przez odrzucenie jego "dodatkowych" najbardziej znaczących bitów. Wynik jest następnie traktowany jako wartość typu docelowego.
- Jeśli typ źródła jest mniejszy niż typ docelowy, wartość źródłowa jest rozszerzona znakiem lub zerem, tak aby miała ten sam rozmiar jak typ docelowy. Rozszerzenie znaku jest używane, jeśli typ źródła jest podpisany; rozszerzenie zerowe jest używane, jeśli typ źródła jest niepodpisany. Wynik jest następnie traktowany jako wartość typu docelowego.
- Jeśli typ źródła jest taki sam jak typ docelowy, wartość źródłowa jest traktowana jako wartość typu docelowego.
Podczas konwertowania
decimalwartości na typ całkowity ta wartość jest zaokrąglona w kierunku zera do najbliższej wartości całkowitej. Jeśli wynikowa wartość całkowita znajduje się poza zakresem typu docelowego, zostanie zgłoszony element OverflowException .Podczas konwertowania
doublewartości lubfloatna typ całkowity ta wartość jest zaokrąglona w kierunku zera do najbliższej wartości całkowitej. Jeśli wynikowa wartość całkowita znajduje się poza zakresem typu docelowego, wynik zależy od kontekstu sprawdzania przepełnienia. W zaznaczonym kontekście OverflowException jest zgłaszany element , podczas gdy w nieznakowanym kontekście wynik jest nieokreśloną wartością typu docelowego.Podczas konwersji
doublenafloatwartośćdoublewartość jest zaokrąglona do najbliższejfloatwartości.doubleJeśli wartość jest za mała lub zbyt duża, aby zmieścić się w typiefloat, wynik wynosi zero lub nieskończoność.W przypadku konwersji
floatlubdoublenadecimalwartość wartość źródłowa jest konwertowana nadecimalreprezentację i zaokrąglona do najbliższej liczby po 28 miejscu dziesiętnym, jeśli jest to konieczne. W zależności od wartości źródłowej może wystąpić jeden z następujących wyników:- Jeśli wartość źródłowa jest zbyt mała, aby być reprezentowana
decimaljako , wynik stanie się zerowy. - Jeśli wartość źródłowa to NaN (a nie liczba), nieskończoność lub zbyt duża, aby być reprezentowana jako
decimal, OverflowException jest zgłaszana wartość .
- Jeśli wartość źródłowa jest zbyt mała, aby być reprezentowana
W przypadku konwersji
decimalna wartość lubfloatwartość źródłowa jest zaokrąglona odpowiednio do najbliższejdoublelubfloatwartości.double
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz następujące sekcje specyfikacji języka C#: