舍入一个 double 将其转换成一个 int (java)

现在我正在尝试这个:

int a = round(n);

其中 ndouble但它不工作。我做错了什么?

301077 次浏览
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();
}
}

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

代码片段中 round()方法的返回类型是什么?

如果这是 Math.round()方法,则当输入参数为 Double 时返回 Long。

因此,必须强制转换返回值:

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

四舍五入到“最近的”整数,像这样:

1.4 -> < strong > 1

1.6 -> < strong > 2

-2.1 -> < strong >-2

-1.3 -> < strong >-1

-1.5 -> < strong >-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)

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

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

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 函数被重载 当它接收到一个 float 值时,它会给你一个 int 值。

int a=Math.round(1.7f);

当它接收到一个双精度值时,它会给出一个 long,因此您必须将它类型化为 int。

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

这样做是为了防止精度损失。你的双精度值是64位,但是你的 int 变量只能存储32位,所以它只能把它转换成 long,也就是64位,但是你可以像上面解释的那样把它类型转换成32位。