舍入一个double来把它变成一个int(java)

现在我正在尝试这个:

int a = round(n); 

其中n是一个double但它不工作。 我究竟做错了什么?

片段中round()方法的返回types是什么?

如果这是Math.round()方法,则在input参数为Double时返回一个Long。

所以,你将不得不施放返回值:

 int a = (int) Math.round(doubleVar); 

如果你不喜欢Math.round(),你也可以使用这个简单的方法:

 int a = (int) (doubleVar + 0.5); 

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; } } 

您可以根据需要更改条件(结果<0.5)

 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(); } } 

Math.round文档说:

返回将参数四舍五入为整数的结果 。 结果等同于(int) Math.floor(f+0.5)

无需转换为int 。 也许它是从过去改变的。

 public static int round(double d) { if (d > 0) { return (int) (d + 0.5); } else { return (int) (d - 0.5); } } 

你真的需要发布一个更完整的例子,所以我们可以看到你想要做什么。 从你发布的内容来看,这里是我能看到的。 首先,没有内置的round()方法。 您需要调用Math.round(n) ,或静态导入Math.round ,然后像调用它一样。