po przecinku (C# odniesienia)
decimal Słowa kluczowego wskazuje typ danych 128-bitowego.W porównaniu do typu zmiennoprzecinkowego, decimal typ ma więcej precyzji i mniejszy zakres, co sprawia, że odpowiednie do obliczeń finansowych i monetarnych.Zakresie i precyzji dla decimal typu są pokazane w poniższej tabeli.
Typ |
Zakresie |
Precyzja |
Typ.NET Framework |
---|---|---|---|
decimal |
(-7.9 x 1028 to 7.9 x 1028) / (100 to 28) |
cyframi znaczącymi 28-29 |
Literały
Jeśli chcesz literału numerycznego real powinien być traktowany jako decimal, użyj sufiks m lub M, na przykład:
decimal myMoney = 300.5m;
Bez sufiksu m, numer jest traktowany jako Podwójna i generuje błąd kompilatora.
Konwersje
Typy zintegrowane są niejawnie konwertowane na decimal , a wynik jest decimal.Dlatego można zainicjować dziesiętne zmiennej przy użyciu literału bez przyrostka, liczba całkowita, następująco:
decimal myMoney = 300;
Istnieje niejawna konwersja między typami zmiennoprzecinkowych i decimal typu; w związku z tym oddanych musi służyć do konwersji między tymi dwoma typami.Na przykład:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
Można również mieszać decimal i liczbowe typy zintegrowane w tym samym wyrażeniu.Jednak mieszanie decimal i zmiennoprzecinkowych typów bez rzutowania powoduje błąd kompilacji.
Aby uzyskać więcej informacji na temat konwersji niejawnych liczbowe, zobacz Tabeli niejawne konwersje numeryczne (C# odniesienia).
Aby uzyskać więcej informacji na temat jawne konwersje liczbowe, zobacz Jawne numeryczne tabeli konwersji (C# odniesienia).
Formatowanie dziesiętne wyjście
Wyniki można formatować za pomocą String.Format metoda, lub poprzez Console.Write metoda, która wywołuje String.Format().Format waluty jest określony za pomocą ciągu formatu waluty standardowej "C" lub "c", jak pokazano w drugim przykładzie tego artykułu.Aby uzyskać więcej informacji o String.Format metoda, zobacz String.Format.
Przykład
W tym przykładzie decimal i int są mieszane w tym samym wyrażeniu.Wynik daje w wyniku decimal typu.
Poniższy przykład powoduje błąd kompilatora próbuje dodać Podwójna i decimal zmiennych.
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);
Wynik jest następujący błąd:
Operator '+' cannot be applied to operands of type 'double' and '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 danych wyjściowych jest sformatowana przy użyciu ciąg formatu waluty.Należy zauważyć, że x jest zaokrąglana, ponieważ miejsc dziesiętnych przekracza $0,99.Zmienna y, który reprezentuje maksymalną cyfr dokładnie, 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 to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.
Zobacz też
Informacje
Tabela typów integralną (C# odniesienia)
Wbudowane typy tabeli (C# odniesienia)
Tabeli niejawne konwersje numeryczne (C# odniesienia)
Jawne numeryczne tabeli konwersji (C# odniesienia)
Koncepcje
Standard ciągi formatów liczbowych