C# 算术运算始终计算为0

C# 算术运算始终计算为0,c#,C#,我正在研究植绒算法,为此,我需要一个内聚力的算法。为此,我使用以下行: velocityVector.X = 10 / (distX - distanceBetweenLabels) * (label.Location.X - ctrl.Location.X); 在这一行之后,velocitVector.X始终等于0。distX总是正的。我的目标是在粒子之间产生良好的内聚力,同时保持它们之间的最小距离 更新 因此,感谢您的评论,10/(di

我正在研究植绒算法,为此,我需要一个内聚力的算法。为此,我使用以下行:

velocityVector.X = 10 / (distX - distanceBetweenLabels) 
                          * (label.Location.X - ctrl.Location.X);
在这一行之后,velocitVector.X始终等于0。distX总是正的。我的目标是在粒子之间产生良好的内聚力,同时保持它们之间的最小距离

更新

因此,感谢您的评论,
10/(distX-标签之间的距离)
默认为整数计算,因此整行等于0

10 / (distX - distanceBetweenLabels) 
                      * (label.Location.X - ctrl.Location.X);
10如果分母变成整数,则此处保留表达式整数。
将其更改为
10.0
或更好的
10F
浮动
10D
以获得双精度

评估以下各项:

var intTest = 10/123;
var floatTest = 10F/123;
var doubleTest = 10D/123;
产出如下:

0
0.08130081
0.0813008130081301

尝试使用
10.0
而不是
10
-它可能默认为
int
算术。分母中的数字是整数吗?一个整数除以任何大于10的数字将导致整数结果为零-您可能需要使用浮点/双精度算术-这不是完全准确的。
10
不会使“整个表达式成为整数计算”。如果变量
distX
distanceBetweenLabels
也是整数,则表达式
10/(distX-distanceBetweenLabels)
使用整数数学计算。但是,如果
distX
distanceBetweenLabels
中的任何一个是
double
,则表达式将使用浮点数学进行计算。