C# Formato literal/Long/int?
-
26-10-2019 - |
Pregunta
En c / c# / etc., puede decirle al compilador que un número literal no es lo que parece ser (es decir, float
en vez de double
, unsigned long
en vez de int
:
var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long
etc.
¿Alguien podría señalarme una lista de estos? Estoy buscando específicamente un sufijo para short
o Int16
.
Solución
var d = 1.0d; // double
var d0 = 1.0; // double
var d1 = 1e+3; // double
var d2 = 1e-3; // double
var f = 1.0f; // float
var m = 1.0m; // decimal
var i = 1; // int
var ui = 1U; // uint
var ul = 1UL; // ulong
var l = 1L; // long
Creo que eso es todo ... no hay especificadores literal para cortos/ushort/byte/sbyte
Otros consejos
De §2.4.4.2 literales enteros:
El tipo de un literal entero se determina de la siguiente manera:
- Si el literal no tiene sufijo, tiene el primero de estos tipos en los que se puede representar su valor:
int
,uint
,long
,ulong
.- Si el literal se sufre
U
ou
, tiene el primero de estos tipos en los que se puede representar su valor:uint
,ulong
.- Si el literal se sufre
L
ol
, tiene el primero de estos tipos en los que se puede representar su valor:long
,ulong
.- Si el literal se sufre
UL
,Ul
,uL
,ul
,LU
,Lu
,lU
, olu
, es de tipoulong
.
Y de §2.4.4.3 literales reales:
Si no se especifica un sufijo de tipo real, el tipo de literario real es el doble. De lo contrario, el sufijo de tipo real determina el tipo de literal real, de la siguiente manera:
- Un verdadero sufijo literal por
F
of
es de tipofloat
. Por ejemplo, los literales1f
,1.5f
,1e10f
, y123.456F
son todos de tipofloat
.- Un verdadero sufijo literal por
D
od
es de tipodouble
. Por ejemplo, los literales1d
,1.5d
,1e10d
, y123.456D
son todos de tipodouble
.- Un verdadero sufijo literal por
M
om
es de tipodecimal
. Por ejemplo, los literales1m
,1.5m
,1e10m
, y123.456M
son todos de tipodecimal
. Este literal se convierte en un valor decimal tomando el valor exacto y, si es necesario, redondeando al valor representable más cercano utilizando el redondeo del banquero (Sección 4.1.7). Cualquier escala aparente en el literal se conserva a menos que el valor sea redondeado o el valor es cero (en el que el último caso, el signo y la escala serán 0). Por lo tanto, el literal2.900m
se analizará para formar el decimal con signo0
, coeficiente2900
, y escala3
.
Si su variable no es un breve, debe lanzarla explícitamente:
Object s = (Int16) 1;
No hay uno para abreviar. Solo usa short s = 1;
.