Java-如何将浮点(或BigDecimal)值四舍五入到0.5?
这个问题似乎很简单,但我的数学真的很烂,而且我在网上搜索的几个例子似乎对我不起作用。(结果仅返回与输入值相同的值等) 例如。。但它是C语言而不是Java语言 所以我的目标是我有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.
%.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()上做同样的四舍五入,太棒了