Visual Studio 2015 говорит, что "приведение избыточно". Почему?



У меня есть изображение шириной 888px и высотой 592px, с соотношением сторон ширина: высота как 3: 2.



Следующее производит неправильное значение 1, из-за вычисления целого числа/усечения как BitmapDecoder.PixelWidth и BitmapDecoder.PixelHeight - это uint (целое число без знака), а decoder ниже-объект BitmapDecoder.



double aspectRatio = decoder.PixelWidth / decoder.PixelHeight;



Ниже приведено ожидаемое правильное значение 1.5, но Visual Studio говорит, что "приведение избыточно", но почему?



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

536   2  

2 ответов:

Вам нужно только бросить один из uints, чтобы удвоить силу арифметики с плавающей запятой, так что либо:

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

Или:

double aspectRatio = (double)decoder.PixelWidth / decoder.PixelHeight;
Лично я бы предпочел последнее, но это вопрос мнения.

Просто чтобы дополнить ответ @ChrisF, вы можете увидеть это красиво в коде IL, где одно приведение к double приведет к преобразованию для обоих значений:

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)

Comments

    Ничего не найдено.