decimal (odwołanie w C#)
Słowo kluczowe decimal wskazuje typ danych 128-bitowych.W porównaniu z typami zmiennoprzecinkowymi typ decimal ma większą dokładność i mniejszy zakres, przez co jest odpowiedni do obliczeń finansowych i walutowych.Przybliżony zakres i dokładność typu decimal pokazano w poniższej tabeli.
Typ |
Przybliżony zakres |
Dokładność |
Typ programu .NET Framework |
---|---|---|---|
decimal |
(od -7,9 x 1028 do 7,9 x 1028) / (od 100 do 28) |
28–29 cyfr znaczących |
Literały
Jeśli literał liczbowy typu real ma być traktowany jako literał typu decimal, należy użyć sufiksu m lub M, na przykład:
decimal myMoney = 300.5m;
Bez sufiksu m liczba jest traktowana jako liczba typu double i jest generowany błąd kompilatora.
Konwersje
Typy całkowite są niejawnie konwertowane na typ decimal, a obliczony wynik jest wartością typu decimal.Dlatego można zainicjować zmienną typu decimal, używając literału typu integer, bez konieczności użycia sufiksu, tak jak pokazano poniżej:
decimal myMoney = 300;
Nie istnieje niejawna konwersja między typami zmiennoprzecinkowymi a typem decimal, dlatego należy użyć rzutowania, aby wykonać konwersję między tymi dwoma typami.Na przykład:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
Typu decimal i liczbowych typów całkowitych można używać razem w jednym wyrażeniu.Jednak jednoczesne użycie typu decimal i typów zmiennoprzecinkowych bez użycia rzutowania spowoduje błąd kompilatora.
Aby uzyskać więcej informacji dotyczących niejawnych konwersji liczbowych, zobacz Tabela niejawnych konwersji liczbowych (odwołanie w C#).
Aby uzyskać więcej informacji dotyczących jawnych konwersji liczbowych, zobacz Tabela jawnych konwersji liczbowych (odwołanie w C#).
Formatowanie danych wyjściowych typu decimal
Wyniki można formatować ze pomocą metody String.Format lub metody Console.Write, która wywołuje metodę String.Format().Format waluty jest określany przy użyciu standardowego ciągu formatu walutowego (C lub c), tak jak pokazano w drugim przykładzie w dalszej części tego artykułu.Aby uzyskać więcej informacji dotyczącej metody String.Format, zobacz String.Format.
Przykład
W poniższym przykładzie występuje błąd kompilatora spowodowany próbą dodania do siebie zmiennych typu double i decimal.
double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub);
// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);
Wynikiem jest następujący błąd:
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
W tym przykładzie typy decimal i int są używane razem w jednym wyrażeniu.Obliczony wynik jest wartością typu decimal.
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
// Output: 12.1
W tym przykładzie dane wyjściowe są formatowane przy użyciu ciągu formatu walutowego.Należy zauważyć, że wartość x jest zaokrąglana, ponieważ liczba miejsc dziesiętnych przekracza wartość 0,99 PLN.Zmienna y, która przedstawia maksymalną dokładną liczbę cyfr, jest wyświetlana dokładnie w poprawnym formacie.
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.
Zobacz też
Informacje
Tabela typów całkowitych (odwołanie w C#)
Tabela typów wbudowanych (odwołanie w C#)
Tabela niejawnych konwersji liczbowych (odwołanie w C#)
Tabela jawnych konwersji liczbowych (odwołanie w C#)
Koncepcje
Przewodnik programowania w języku C#
Standardowe ciągi formatujące liczby