C# 返回非浮点值的整数参数的除法
我有两个整数参数,我将这些参数除以,并将结果存储到浮点变量中C# 返回非浮点值的整数参数的除法,c#,.net,floating-point,type-conversion,C#,.net,Floating Point,Type Conversion,我有两个整数参数,我将这些参数除以,并将结果存储到浮点变量中 float kx=(float)(img.Width / refsize.Width); 举一个问题的例子 img.width=2620 refsize.width=1499 根据正常数学,kx变量应返回~1.747831887925284 但它会将其四舍五入为整数kx=1 为什么会这样 float kx=(img.Width / (float)refsize.Width); 发生这种情况的原因是您将两个整数相除,结果是整数,
float kx=(float)(img.Width / refsize.Width);
举一个问题的例子
img.width=2620 refsize.width=1499
根据正常数学,kx变量应返回~1.747831887925284
但它会将其四舍五入为整数kx=1
为什么会这样
float kx=(img.Width / (float)refsize.Width);
发生这种情况的原因是您将两个整数相除,结果是整数,您将其转换为浮点。发生这种情况的原因是您首先将整数除以一个整数,该整数是整数或(
DivideByZeroException
)。然后将整数结果转换为float
尝试
float kx=((float)img.Width)/refsize.Width)代码>这取决于操作顺序
float kx=(float)(img.Width / refsize.Width);
首先评估
img.Width / refsize.Width
然后将结果(即整数1)强制转换为浮点
为了获得预期的结果,在除法之前将两个宽度都转换为浮点(从技术上讲,您可以转换其中一个,编译器将升级另一个,但我更喜欢显式的。您永远不知道谁会在以后的几年中维护代码)
由于括号具有优先级,所以整数除以整数,得到结果1。你应该写
float kx = (float)img.Width / (float)refsize.Width;
要得到正确的结果。必须在除法中显式指定一个浮点,否则它将变为整数division@dcg谢谢
float kx = (float)img.Width / (float)refsize.Width;