Sufiks deklaracji dla typu dziesiętnego


113

Jeśli chcę użyć w kodzie literału dziesiętnego, zauważyłem, że istnieje sufiks m (gdzie m oznacza pieniądze). Czy jest to odpowiednie dla jakichkolwiek miejsc po przecinku, czy też istnieje bardziej ogólne przypisanie (d oznacza podwójne, to z pewnością nie jest właściwe, chociaż obsługiwana jest bezpośrednia konwersja).

object decimalValue=2m;

Proszę zauważyć, że jako przykład wziąłem przypisanie obiektu, ponieważ w przypadku ...

decimal decimalValue=2;

... jest niejawnie jasne, że 2 powinno być interpretowane jako dziesiętne przez kompilator.

m wydaje się być w porządku, msdn używa go jako przykładu dla typu dziesiętnego.

Odpowiedzi:


234

Udokumentowane w specyfikacji języka C # , rozdział 2.4.4:

float f = 1.2f;
double d = 1.2d;
uint u = 2u;
long l = 2L;
ulong ul = 2UL;
decimal m = 2m;

Nic dla int, byte, sbyte, short, ushort.


Chociaż nie jest to przyrostek, możemy również zadeklarować postać za char c = 'a'pomocą apostrofów wokół znaku.
Kevin Hogg

Możesz również odnieść się do tego dokumentu, który jest bardziej przyjazny dla użytkownika: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Douglas Gaskell

22

Bez przyrostka liczbowy prawdziwy literał będzie Double. Przyrostek m określa, że ​​liczbowy literał rzeczywisty powinien być liczbą dziesiętną.

Jest to właściwie ważne, aby wiedzieć, ponieważ arytmetyka wartości zmiennoprzecinkowych (takich jak Double) jest nieprecyzyjna. Na przykład:

object decimalValue=(5.32 + 2.23);

Tutaj decimalValue faktycznie będzie zawierać Double, z nieoczekiwaną wartością 7.5500000000000007! Jeśli chcę 7,55, mógłbym to zrobić:

object decimalValue=(5.32m + 2.23m);

Aby odpowiedzieć na pytanie, czy istnieje bardziej ogólny sufiks, m jest jedynym sufiksem dla Decimal w C #. Może to oznaczać pieniądze, jak wspomniałeś, ale musieli użyć czegoś innego niż d, ponieważ jest używany przez Double!

Dalsze czytanie: dziesiętne (odwołanie w C #)


1
Dzięki, widziałem i umieściłem łącze msdn w moim pytaniu dokładnie tak, jak wpisałeś swoją odpowiedź. Jednak przyjąłem posadę Hansa Passanta, ponieważ jest fajna lista, która bardzo pomoże osobom, które przyjdą na ten post ze względu na przyrostki. Ale definitywnie dziękuję.
HCL,

0

Krótka odpowiedź na deklarację dziesiętną w C #

decimal firstMoney = 141.28m;

O / P: 141,28

decimal secondMoney = 100.00m;

O / P: 100

Więcej informacji można znaleźć w witrynie MSDN .

Nadzieja pomaga komuś.


@ Thomas, rozumiem, ale właśnie próbowałem udzielić krótkiej odpowiedzi dla tych, którzy szukają deklaracji dziesiętnej, czy powinienem usunąć post? myślisz, że to nie jest przydatne?
shaijut

3
Uważam to za nieprzydatne, ale daleki jestem od doskonałości i może pomóc innym. Jeśli po drugim przeczytaniu okaże się, że nie jest to przydatne, możesz je usunąć. Jeśli myślisz, że to komuś pomoże, zostaw to tak, jak jest :)
Thomas Ayoub

2
@ThomasAyoub Osobiście nie widzę, co to dodaje, że odpowiedź Hansa jeszcze nie obejmuje.
Lankymart
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.