我乍一看,这将得到重复提及。它很可能是,但我想大多数人会认为答案类似于这个问题: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.但是,将这两个分为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;
}
更新 出于某种原因,我的变量声明似乎存在冲突。即使我宣称它们都在不同的范围内,无论出于什么原因它都在激起冲突。重命名变量后,我得到了更正的值。
答案 0 :(得分:5)
您已将字段correctedImageWidth
定义两次,一次定义为int
(位于if
块中),一次定义为decimal
(位于else
块中)。
“观看”窗口的屏幕截图显示int
输入的字段值,此时显示0
(自else
阻止后未分配)。尝试观看decimal
键入的字段,或者只是在调试时将鼠标悬停在另一个decimal
类型的字段上,它应该显示正确的值。