现在我正在尝试这个:
int a = round(n);
其中n
是double
,但它不起作用。我究竟做错了什么?
答案 0 :(得分:215)
代码段中round()
方法的返回类型是什么?
如果这是Math.round()
方法,则当输入参数为Double时返回Long。
因此,您必须转换返回值:
int a = (int) Math.round(doubleVar);
答案 1 :(得分:26)
如果你不喜欢Math.round(),你也可以使用这个简单的方法:
int a = (int) (doubleVar + 0.5);
答案 2 :(得分:11)
将 double 舍入到“最近的” 整数 ,如下所示:
1.4 - >的 1 强>
1.6 - >的 2 强>
-2.1 - >的 -2 强>
-1.3 - >的 -1 强>
-1.5 - >的 -2 强>
private int round(double d){
double dAbs = Math.abs(d);
int i = (int) dAbs;
double result = dAbs - (double) i;
if(result<0.5){
return d<0 ? -i : i;
}else{
return d<0 ? -(i+1) : i+1;
}
}
您可以根据需要更改条件(结果&lt; 0.5)。
答案 3 :(得分:3)
import java.math.*;
public class TestRound11 {
public static void main(String args[]){
double d = 3.1537;
BigDecimal bd = new BigDecimal(d);
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
// output is 3.15
System.out.println(d + " : " + round(d, 2));
// output is 3.154
System.out.println(d + " : " + round(d, 3));
}
public static double round(double d, int decimalPlace){
// see the Javadoc about why we use a String in the constructor
// http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)
BigDecimal bd = new BigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}
}
答案 4 :(得分:2)
Math.round函数已重载 当它收到一个浮点值时,它会给你一个int。例如,这可行。
int a=Math.round(1.7f);
当它收到一个double值时,它会给你一个long,因此你必须将它强制转换为int。
int a=(int)Math.round(1.7);
这样做是为了防止精度损失。你的double值是64位,但是你的int变量只能存储32位,因此它只是将它转换为long,即64位,但你可以将它转换为32位,如上所述。
答案 5 :(得分:1)
Math.round
的文档说:
返回将参数四舍五入为整数的结果。结果 相当于
(int) Math.floor(f+0.5)
。
无需转发int
。也许它从过去改变了。
答案 6 :(得分:0)
public static int round(double d) {
if (d > 0) {
return (int) (d + 0.5);
} else {
return (int) (d - 0.5);
}
}
答案 7 :(得分:-1)
你真的需要发布一个更完整的例子,所以我们可以看到你想要做的事情。根据您发布的内容,这是我能看到的内容。首先,没有内置的round()
方法。您需要拨打Math.round(n)
或静态导入Math.round
,然后按照您的方式拨打电话。