Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回非浮点值的整数参数的除法_C#_.net_Floating Point_Type Conversion - Fatal编程技术网

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;