2015-12-02 28 views
5

Tôi có hình ảnh có chiều rộng 888px và chiều cao 592px, với tỷ lệ cỡ ảnh: chiều rộng: chiều cao là 3: 2.Visual Studio 2015 nói rằng 'truyền thừa'. Tại sao?

Sau đây tạo ra một giá trị sai số 1, vì tính toán số nguyên/cắt ngắn như BitmapDecoder.PixelWidth và BitmapDecoder.PixelHeight đều uint (unsigned integer), và decoder dưới đây là một đối tượng BitmapDecoder.

double aspectRatio = decoder.PixelWidth/decoder.PixelHeight;

Sau đây cung cấp cho các dự kiến ​​giá trị chính xác là 1,5, nhưng Visual Studio nói 'Cast là không cần thiết', nhưng tại sao?

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

+1

bạn cần chỉ là một (double) đúc - double/int = double. Hoặc int/double = double. – Dmitriy

+0

Kết quả sẽ luôn là gấp đôi nếu bạn chia đôi với bất kỳ loại số nào. –

+0

'double aspectRatio = static_cast (decoder.PixelWidth)/decoder.PixelHeight;' phải đủ để làm cho trình biên dịch sử dụng 'PixelHeight' làm gấp đôi. – Pixelchemist

Trả lời

12

Bạn chỉ cần để cast một của uints tăng gấp đôi để buộc các điểm số học nổi do đó, hoặc:

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

hay:

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

Cá nhân, tôi 'd đi với sau này, nhưng nó là một vấn đề của ý kiến.

+1

Tải xuống! Một diễn viên sẽ là đủ nhưng Visual Studio đưa tôi ra khỏi đường đua. Tôi muốn Visual Studio để lại một mình dàn diễn viên đầu tiên và chỉ hiển thị diễn viên thứ hai là không cần thiết để hoàn toàn chính xác. Trong ý nghĩa đó Visual Studio là một chút sai lầm nhưng có thể được giải thích tại sao. – user2921851

2

Chỉ cần để bổ sung cho @ câu trả lời ChrisF, bạn có thể thấy điều này độc đáo trong các mã IL, nơi một dàn diễn viên duy nhất để double sẽ mang lại một chuyển đổi cho cả hai giá trị:

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) 
Các vấn đề liên quan