12

我需要将双精度舍入到最接近的 0.5。我不想以 .0 结尾的数字结束。

我搜索了一下,但似乎每个人都想四舍五入到最接近的 0.5倍数,而不是最接近的一半而不是整数。我尝试除以 0.5,四舍五入,然后乘以 0.5,但这仍然四舍五入为 0.5 的倍数。在此之后添加或减去 0.5 并不总是会四舍五入它应该去的数字(你可以在应该减去时添加)。

任何帮助将不胜感激。

4

3 回答 3

11

我认为这Math.round(num * 2) / 2.0f应该解决四舍五入到最接近一半的问题:

Math.round(3.9 * 2) / 2.0f == 8 / 2.0f = 4.0
Math.round(3.6 * 2) / 2.0f == 7 / 2.0f = 3.5
Math.round(3.1 * 2) / 2.0f == 6 / 2.0f = 3.0
于 2013-08-01T15:25:27.443 回答
9

减去,四舍五入和添加......

Math.round(value - 0.5) + 0.5

问题评论中提到的另一种工作方式:

Math.floor(value) + 0.5
于 2013-05-29T06:38:35.737 回答
3

四舍五入到任何小数 f:

double f = 0.5;
double rounded = f * Math.round(x/f);
于 2013-05-29T06:42:08.187 回答