Java-如何将浮点(或BigDecimal)值四舍五入到0.5?

Java-如何将浮点(或BigDecimal)值四舍五入到0.5?,java,rounding,Java,Rounding,这个问题似乎很简单,但我的数学真的很烂,而且我在网上搜索的几个例子似乎对我不起作用。(结果仅返回与输入值相同的值等) 例如。。但它是C语言而不是Java语言 所以我的目标是我有%.1f格式浮点数或双精度或大小数,并希望将其四舍五入到最接近的.5 example: 1.3 --> 1.5 5.5 --> 5.5 2.4 --> 2.5 3.6 --> 4.0 7.9 --> 8.0 我尝试了下面的例子,但没有成功:(下面只是输出1.3,这是原始值。我希望它是1.

这个问题似乎很简单,但我的数学真的很烂,而且我在网上搜索的几个例子似乎对我不起作用。(结果仅返回与输入值相同的值等)

例如。。但它是C语言而不是Java语言

所以我的目标是我有
%.1f
格式
浮点数
双精度
大小数
,并希望将其四舍五入到最接近的.5

example:

1.3 --> 1.5
5.5 --> 5.5
2.4 --> 2.5
3.6 --> 4.0
7.9 --> 8.0
我尝试了下面的例子,但没有成功:(下面只是输出1.3,这是原始值。我希望它是1.5

public class tmp {

    public static void main(String[] args) {

      double foo = 1.3;

      double mid = 20 * foo;

      System.out.println("mid " + mid);

      double out = Math.ceil(mid);

      System.out.println("out after ceil " + out);

      System.out.printf("%.1f\n", out/20.0);
    }
}

用2乘以(然后再除以),而不是20,就可以了。

这里有一个简单的方法:

public static float roundToHalf(float x) {
    return (float) (Math.ceil(x * 2) / 2);
}
这将使值加倍,取其上限,并将其减半。

请参阅关于在构造函数中使用字符串的原因

 double nearestPoint5 = Math.ceil(d * 2) / 2;
 public static double round(double d, int decimalPlace){
    BigDecimal bd = new BigDecimal(Double.toString(d));
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
 }

不使用函数,您可以

double rounded = (double)(long)(x * 2 + 0.5) / 2;

注意:这将向无穷大方向取整。

下面的公式不适用于2.16这样的数字

public static float roundToHalf(float x) {
  return (float) (Math.ceil(x * 2) / 2);
}
正确答案应该是2.0,但上面的方法给出了2.5

正确的代码应为:

public static double round(float d)
{
    return 0.5 * Math.round(d * 2);
}

其他一些答案的舍入不正确(
Math.round
应该使用,而不是
Math.floor
Math.ceil
),还有一些答案只能舍入到0.5(这就是问题的答案,是的).这里有一个简单的方法,可以正确地四舍五入到最近的任意双精度数,并进行检查以确保它是正数

public static double roundToNearest(double d, double toNearest) {
    if (toNearest <= 0) {
        throw new IllegalArgumentException(
                "toNearest must be positive, encountered " + toNearest);
    }
    return Math.round(d/toNearest) * toNearest;
}
公共静态双音调测试(双d,双音调测试){

如果(最糟糕的天哪!!:D谢谢!作为开发人员我应该学习数学!我甚至可以在floor()上做同样的四舍五入,太棒了