将NumericUpDown值设置为float时,它将变为0

时间:2012-05-17 21:31:28

标签: c# floating-point int numeric

所以resizeWidth和resizeHeight是以下代码中的numericUpDown控件。 另外,tempBitmapW和tempBitmapH都是浮点数。

float rW = (float)resizeWidth.Value;
float rH = (float)resizeHeight.Value;
rH = (float)Math.Truncate(tempBitmapH * ((float)rW / tempBitmapW));
int rsW = (int)rW;
int rsH = (int)rH;
resizeWidth.Value = rsW;
resizeHeight.Value = rsH;

现在当我调试它时,rsW和rsH以及rW和rH不读为0,没有一个。 但由于某种原因,numericUpDown控件会抛出一个错误,因为值0在最小/最大范围之外(最小值设置为1),所以基本上它将它读为0。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你只是没有正确理解演员是如何工作的。 由于你将浮点数转换为int的方式,你得到0.浮点值可能是0.42,但是会在整数中转换为0。

您应该详细检查演员如何工作,这可能会解决您的问题。

答案 1 :(得分:0)

为了扩展squelos的答案 - 听起来好像是你正在查看调试器中的值以及抛出异常的时刻是两个不同的时刻。如果你得到一个例外,说这个值为零,那可能是因为该值为零。

原因它可能变为零是因为从float到int的强制转换总是向下舍入到最接近的整数。