2015-12-02 13 views
5

Genişlik en boy oranıyla: 888px ve yüksekliği 592px olan bir görüntüm var: yükseklik 3: 2 olarak.Visual Studio 2015, "dökümün gereksiz olduğunu" söylüyor. Niye ya?

aşağıdakiler BitmapDecoder amacı olan aşağıdaki BitmapDecoder.PixelWidth ve BitmapDecoder.PixelHeight hem uint (işaretsiz bir tamsayı) gibi, çünkü tam sayı hesaplama/kesme bölgesinin 1 yanlış bir değer üretir ve decoder.

double aspectRatio = decoder.PixelWidth/decoder.PixelHeight;

şu 1.5 beklenen doğru değer verir, ama Visual Studio 'Cast gereksiz' diyor, ama neden?

double aspectRatio = (double)decoder.PixelWidth/(double)decoder.PixelHeight;

+1

- çift ​​/ int = çift. Veya int/double = double. – Dmitriy

+0

Herhangi bir sayısal türle bir çift bölerseniz sonuç her zaman bir çift olur. –

+0

'double aspectRatio = static_cast (decoder.PixelWidth)/decoder.PixelHeight;' derleyicinin 'PixelHeight' değerini çift olarak kullanması yeterli olmalıdır. – Pixelchemist

cevap

12

Yalnızca kayan nokta aritmetik zorlamak için iki katına uints arasında biri döküm gerekir yani ya:

double aspectRatio = decoder.PixelWidth/(double)decoder.PixelHeight; 

ya: Şahsen

double aspectRatio = (double)decoder.PixelWidth/decoder.PixelHeight; 

, ben Sonuncusuyla git, ama bu bir fikir meselesi. Sadece ChrisF'ın yanıt @ tamamlayacak

+1

Alın! Bir oyuncu yeterli olurdu ama Visual Studio beni pistten çıkardı. Visual Studio'nun ilk oyuncuyu yalnız bırakmasını ve sadece ikinci oyuncuyu kesinlikle doğru olması için gereksiz hale getirmesini diliyorum. Bu anlamda Visual Studio biraz yanıltıcıdır, ancak nedenini açıklayabilir. – user2921851

2

, sen double tek döküm hem değerler için bir dönüşüm verecektir IL kodu, güzel bir şekilde bunu görebilirsiniz: Eğer sadece bir (çift) döküm ihtiyaç

IL_0013: stloc.0  // decoder 
IL_0014: ldloc.0  // decoder 
IL_0015: callvirt UserQuery+Decoder.get_PixelHeight 
IL_001A: conv.r.un // convert uint to float32 
IL_001B: conv.r8  // convert to float64 (double) 
IL_001C: ldloc.0  // decoder 
IL_001D: callvirt UserQuery+Decoder.get_PixelWidth 
IL_0022: conv.r.un // convert uint to float32 
IL_0023: conv.r8  // convert to float64 (double)