In questa linea:
double i = 0xF0000000;
il letterale è di tipo uint
, ma è in fase di implicitamente convertito double
. Quando si chiama i.GetType()
che avrebbe sempre stampa System.Double
, perché la variabile è di tipo double
... l'unica tipo di valore che può contenere è un double
.
Si noti che questa conversione a double
significa che si può perdere di precisione, se si inizia con un long
o ulong
. Per esempio:
using System;
public class Program
{
static void Main()
{
long x = 123456789;
double y = 123456789;
Console.WriteLine(x.ToString("n"));
Console.WriteLine(y.ToString("n"));
}
}
stampe
123,456,789,012,345,678.00
123,456,789,012,346,000.00
Si noti come le poche cifre finali si perdono nella double
, perché la conversione implicita long
-double
può perdere di precisione. (Entrambi hanno 64 bit disponibili, ma solo double
alcuni di questi bit vengono utilizzati per la mantissa.)
Non è un problema per int
o uint
letterali, ma vale la pena di essere consapevole che la conversione avviene.
fonte
2015-11-27 06:51:46
Non c'è alcun tipo 'var'. –