【发布时间】:2012-04-17 23:15:08
【问题描述】:
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
解决这个问题的有效方法是什么?
【问题讨论】:
-
"在 0 上产生更大的区间"是什么意思?
-
您希望看到 x2 的哪些数字?
-
我现在已经包含了这些信息。
-
如果您想要始终向下舍入的“下限”而不是向零舍入的截断,请调用恰当命名的
Floor方法。
标签: c# performance integer rounding truncation