Я знаю, на первый взгляд, это будет дублировать упоминание. И это очень хорошо, но я думаю, что большинство людей думает, что ответ подобен этому вопросу: Division returns zeroНеобычное поведение деления
Это не мое дело. В этом случае деление меньшего числа на большее число целых чисел и получение 0. Это имеет смысл. То, что происходит для меня, не имеет смысла.
Вот мой код:
decimal correctedImageWidth = screenWidth/maxColumnsWithMaxSizeImages;
Значение screenwidth, который является INT, является 1024
. Значение maxColumnsWithMaxSizeImages, также int, равно 3
.
Каким-то образом correctedImageWidth
становится 0. Это нечетно, потому что 1024/3 не равно 0, и округленное число не равно 0, как и другие вопросы, которые были у SO. Вы думаете, что я получу что-то вроде 341
. Вот доказательство того, что эти цифры, что я говорю, что они являются:
Как вы можете увидеть в моем watch
. screenWidth
- 1024, maxColumnsWithMaxSizeImages
- 3. Однако разделение этих 2 на correctedImageWidth
равно 0? Есть ли причина, почему я получаю 0 от этого? Я показал это коллегам, которые в равной степени смущены. Вот мой весь код, возможно, есть что-то, что я делаю? Вряд ли, поскольку они оба являются ints, и оба они имеют действительные целочисленные значения. Но, очевидно, должно быть что-то, что я делаю? Вот код:
int maxColumnsWithMaxSizeImages = (int)System.Math.Ceiling(decimal.Divide(1024, 480));
if (maxColumnsWithMaxSizeImages < _minimumImagesPerRow)
{
.....
} else if (maxColumnsWithMaxSizeImages > _maximumImagesPerRow)
{
....
} else
{
//between 2 and 4 columns
var screenWidth = App.ScreenWidth;
decimal correctedImageWidth = (decimal)((decimal)screenWidth/(decimal)maxColumnsWithMaxSizeImages);
decimal test2 = 1024/3;
decimal test3 = (decimal)1024/(decimal)3;
var test = correctedImageWidth;
}
UPDATE По какой-то причине, кажется, что там был конфликт в моих объявлениях переменных. Хотя я объявил их обоих в разных областях, по какой-то причине это вызывало конфликт. После переименования переменной я получаю исправленное значение.
Для меня результат '341': https://dotnetfiddle.net/AtXbS5 –
Итак, что вы получаете за' test2' и 'test3'? Кроме того, поскольку вы переходите к 'decimal', вы теперь делаете десятичное деление. –
[mcve] сделает этот вопрос действительно хорошим. – chris