M # C ondalık değişmez gösterimde ne anlama geliyor?


311

Ondalık veri türleriyle çalışmak için bunu değişken başlatma ile yapmam gerekiyor:

decimal aValue = 50.0M;

M parçası ne anlama geliyor?

Yanıtlar:


386

Diğerlerinin söylediği gibi, ondalık bir değişmez anlamına gelir. Bununla birlikte, kökenleri muhtemelen bu cevabın başka bir yerinde önerilenler değildir. Gönderen C # Açıklamalı Standardı (ECMA sürümü değil, MS sürümü):

decimalEki A / G / D daha önce tarafından alındıktan sonra m double. M'nin para anlamına geldiği öne sürülmesine rağmen, Peter Golde, M'nin sadece bir sonraki en iyi mektup olarak seçildiğini hatırlıyor decimal.

Benzer bir açıklama, C # 'ın ilk versiyonlarının sırasıyla byteve shortdeğişmez değerler için "Y" ve "S" içerdiğinden bahseder . Çok sık yararlı olmama gerekçesiyle düşürüldüler.


6
Bu, E / e'nin bir sonraki en iyi mektup olmadığı sorusunu bırakır.
VVS

61
"e", kelimenin tam anlamıyla zaten kullanılmış olması nedeniyle sorunlu olurdu. Örneğin "2e4m" geçerli bir değişmez değerdir (ondalık 20000). Açık olsa bile (ve "1e" sözdizimsel olarak geçersiz değil, canlı çiftler aralığının dışında olduğunu gösteren meraklı bir derleyici hata mesajı ile bitse de iyi olabilir; yine de bir hata olduğundan şüpheleniyorum) kafa karıştırıcı. "c" muhtemelen herhangi bir karışıklığa neden olmadan mantıklı olurdu, ancak hiç şüphesiz insanlara "para birimi" önerebilir :)
Jon Skeet

7
"c", VB.Net'teki dizgiler için karakter değişmeziyle çelişir, ancak dilbilgisi bile biraz farklıdır.
Joel Coehoorn

3
Ben C # ve VB farklı olması ile çok fazla sorun olmazdı. VB zaten farklı hex sözdizimine sahiptir, örneğin IIRC.
Jon Skeet

9
"Ondalık" hecelerini yerleştirirseniz, "De Ci Mal" elde edersiniz. Bunlar kullanımı en mantıklıdır. D zaten alınmış, C karakterler olabilir, M mantıklı bir seçim gibi görünüyor.
Aaron Franke

27

C # özelliklerinden:

var f = 0f; // float
var d = 0d; // double
var m = 0m; // decimal (money)
var u = 0u; // unsigned int
var l = 0l; // long
var ul = 0ul; // unsigned long

Büyük veya küçük harfli gösterim kullanabileceğinizi unutmayın.


19

M, "ondalık" ifadesindeki ilk belirsiz karakter anlamına gelir. Eğer eklemezseniz, sayı çift olarak kabul edilecektir.

D çifttir.


4
Sanırım bazı önemli nedenler var, ama m'yi değişmezden çıkarırsanız derleme zamanı hatası almanız beni rahatsız ediyor. Belirsizmiş gibi değil.
SeaDrive

1
@JSON Tamsayı türleri için bu şekilde çalışır, çünkü orada belirsizlik yoktur - türe uyduğu sürece hiçbir bilgiyi kaybetmez / bozmaz. Aynısı ondalık sayılar için geçerli değildir. Çift değerin 0.42ondalık sayıya dökülmesi size farklı bir değer verebilir 0.42M(ve bir kayan değişmez yerine çift bir literal kullanmak için aynıdır - float val = 423.3ayrıca başarısız olur). Bu yüzden, yanlış bir davranış ve düzeltilmesi yarım saniye süren ve CLR ve C # standartlarına uyan bir derleyici hatası arasında seçim yapıyorsunuz.
Luaan

1
"Dec" gibi "M"
Shadi Namrouti

2

M veya m ile sonlandırılmış gerçek bir değişmez ondalık türündedir. Örneğin, 1m, 1.5m, 1e10m ve 123.456M değişmezlerinin tümü ondalık tiptedir. Bu değişmez değer, tam değer alınarak ve gerekirse bankacının yuvarlanması kullanılarak temsil edilebilir en yakın değere yuvarlanarak ondalık bir değere dönüştürülür. Değer yuvarlanmadıkça veya değer sıfır olmadığı sürece değişmezde görünen herhangi bir ölçek korunur (bu durumda işaret ve ölçek 0 olacaktır). Böylece, 2.900m değişmez değeri, 0 işareti, 2900 katsayısı ve ölçek 3 ile ondalık sayı oluşturmak üzere ayrıştırılacaktır.

Gerçek değişmez değerler hakkında devamını oku


0

Sanırım M mantis'i temsil ediyor. Ondalık para kazanmak için kullanılabilir, ancak ondalık yalnızca para için kullanılır anlamına gelmez.


Bu gerçekten bir tahmindir ve "ilk belirsiz belirsiz karakter" hipotezinden çok daha az mantıklıdır. Destekleyici kanıtınız varsa, cevabınıza ekleyin.
isherwood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.