奇怪的分裂行为

时间:2017-02-02 19:53:12

标签: c#

我乍一看,这将得到重复提及。它很可能是,但我想大多数人会认为答案类似于这个问题:Division returns zero

那不是我的情况。那种情况下,将较小的数字除以较大的数字整数并得到0.这是有道理的。对我来说发生的事情没有意义。

这是我的代码:

decimal correctedImageWidth = screenWidth / maxColumnsWithMaxSizeImages;

screenwidth的值是一个int,是1024。 maxColumnsWithMaxSizeImages(也是int)的值为3

不知何故,correctedImageWidth变为0.这是奇怪的,因为1024/3不等于0,舍入的数字也不是0,就像其他SO问题一样。你认为我会得到像341这样的东西。这里证明这些数字就是我所说的:

Proof

正如您在watch中看到的那样。 screenWidth为1024,maxColumnsWithMaxSizeImages为3.但是,将这两个分为correctedImageWidth为0?我有什么理由从这里得到0?我向同事们展示了这一点,他们也同样困惑。这是我的整个代码,也许我正在做的事情?不太可能,看到它们都是整数并且它们都具有有效的整数值。但显然必须有一些我正在做的事情?这是代码:

        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;
        }

更新 出于某种原因,我的变量声明似乎存在冲突。即使我宣称它们都在不同的范围内,无论出于什么原因它都在激起冲突。重命名变量后,我得到了更正的值。

1 个答案:

答案 0 :(得分:5)

您已将字段correctedImageWidth定义两次,一次定义为int(位于if块中),一次定义为decimal(位于else块中)。

“观看”窗口的屏幕截图显示int输入的字段值,此时显示0(自else阻止后未分配)。尝试观看decimal键入的字段,或者只是在调试时将鼠标悬停在另一个decimal类型的字段上,它应该显示正确的值。