舍入一个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
,然后像调用它一样。