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

x2は、xの切り捨て/丸められたバージョンです。上記のコードに示すように、200ユニットのチャンクを表します。

ただし、上記のコードは0全体でより大きな間隔を生成します。200ではなく400の間隔。

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 に答える