0
float x = 5;
Int16 x2 = (Int16)(x * 0.005);

x2 是 x 的截断/舍入版本。表示 200 个单元的块,如上面的代码所示。

然而,上面的代码在 0 上产生了一个更大的间隔。一个 400 而不是 200 的间隔。

x     x2   intended
-500  -2   -3
-300  -1   -2
-100  0    -1
100   0    0
300   1    1
500   2    2

-210  -1   -2
-190  0    -1
-20   0    -1
-10   0    -1
10    0    0
20    0    0
190   0    0
210   1    1

解决此问题的有效方法是什么?

4

2 回答 2

4
float x = 5;
int16 x2 = (Int16)Math.Floor(x * 0.005);

Math.Floor描述:

返回小于或等于指定双精度浮点数的最大整数。

MSDN

于 2012-04-17T23:27:46.430 回答
1

很难确定,因为尚不清楚您要完成什么,但我怀疑您想要的是Math.Floor. 至少这适用于您的所有数据点。

于 2012-04-17T23:28:12.933 回答