Sufijo de declaración para tipo decimal

113

Si quiero usar un literal decimal en el código, he visto que existe el sufijo m (donde m significa dinero). ¿Es esto apropiado para decimales o hay una asignación más general (d significa doble, eso seguramente no es lo correcto, aunque se admite una conversión directa)?

object decimalValue=2m;

Tenga en cuenta que tomé la asignación de objetos como ejemplo, porque en el caso de ...

decimal decimalValue=2;

... está implícitamente claro que 2 debe interpretarse como decimal a través del compilador.

m parece estar bien, msdn lo usa como ejemplo para el tipo decimal.

HCL
fuente

Respuestas:

234

Documentado en la especificación del lenguaje C # , capítulo 2.4.4:

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

Nada para int, byte, sbyte, short, ushort.

Hans Passant
fuente
Aunque no es un sufijo, también podemos declarar un carácter char c = 'a'usando apóstrofos alrededor del carácter.
Kevin Hogg
También puede consultar este documento, que es más fácil de usar: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Douglas Gaskell
22

Sin un sufijo, un literal real numérico será un Doble. El sufijo m especifica que un literal real numérico debe ser un decimal.

En realidad, es importante saberlo, ya que la aritmética en valores de punto flotante (como Double) es imprecisa. Por ejemplo:

object decimalValue=(5.32 + 2.23);

Aquí, decimalValue realmente contendrá un Double, con el valor inesperado de 7.5500000000000007. Si quiero 7.55, podría hacer esto:

object decimalValue=(5.32m + 2.23m);

Para responder a su pregunta sobre si existe un sufijo más general, m es el único sufijo para decimal en C #. Puede representar dinero como mencionaste, pero sí usaron algo diferente a d, ¡ya que Double lo usa!

Lectura adicional: decimal (referencia de C #)

Brian MacKay
fuente
1
Gracias, he visto y puesto el enlace msdn en mi pregunta exactamente como usted ingresó su respuesta. Sin embargo acepté el puesto de Hans Passant porque hay una bonita lista que ayudará mucho a las personas que vendrán a este puesto por los sufijos. Pero gracias definitivamente.
HCL
0

Respuesta corta para declarar decimal en C #

decimal firstMoney = 141.28m;

O / P: 141.28

decimal secondMoney = 100.00m;

O / P: 100

Para obtener más información, consulte MSDN .

La esperanza ayuda a alguien.

shaijut
fuente
@ Thomas, lo entiendo, pero solo intenté dar una respuesta corta para aquellos que buscan declarar decimal, ¿debería eliminar la publicación? , ¿crees que no es útil?
shaijut
3
Lo veo como no útil, pero estoy lejos de ser perfecto y puede ayudar a otros. Si, en una segunda lectura, no le resulta útil, puede eliminarlo. Si cree que ayudará a alguien, déjelo como está :)
Thomas Ayoub
2
@ThomasAyoub Personalmente, no veo lo que esto agrega que la respuesta de Hans aún no cubre.
Lankymart