繁体   English   中英

如何通过四舍五入在Java中将double转换为int?

[英]How to cast a double to an int in Java by rounding it down?

我需要在 Java 中将 double 转换为 int,但数值必须始终向下取整。 即 99.99999999 -> 99

转换为 int 隐式丢弃任何小数。 无需调用 Math.floor()(假设为正数)

只需使用 (int) 进行类型转换,例如:

System.out.println((int)(99.9999)); // Prints 99

话虽如此,它确实与Math.floor有不同的行为,后者向负无穷大舍入(@Chris Wong)

要将 double 转换为 int 并将其四舍五入为最接近的整数(即不同于典型的(int)(1.8)(int)(1.2) ,它们都将“向下舍入”到 0 并返回1 ),只需将 0.5 添加到您将类型转换为intdouble

例如,如果我们有

double a = 1.2;
double b = 1.8;

然后 x 和 y 的以下类型转换表达式将返回四舍五入的值( x = 1y = 1 ):

int x = (int)(a);   // This equals (int)(1.2) --> 1
int y = (int)(b);   // This equals (int)(1.8) --> 1

但是通过将 0.5 添加到每个,我们将获得在某些情况下可能需要的舍入到最接近的整数结果x = 1y = 2 ):

int x = (int)(a + 0.5);   // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5);   // This equals (int)(2.3) --> 2

作为一个小说明,此方法还允许您控制在(int)类型转换时向上或向下舍入double精度值的阈值

(int)(a + 0.8);

类型转换。 当十进制值大于或等于 0.2 时,这只会向上舍入到(int)a + 1 也就是说,通过在类型转换之前将 0.8 添加到double ,10.15 和 10.03 将在(int)类型转换时向下舍入为 10,但 10.23 和 10.7 将向上舍入为 11。

(int)99.99999

它将是 99。将 double 转换为 int 不会舍入,它会丢弃小数部分。

Math.floor(n)

其中 n 是双精度值。 看起来,这实际上会返回一个双精度值,因此请确保在此之后对其进行类型转换。

这很好用int i = (int) dbl;

new Double(99.9999).intValue()

试试这个,这很简单

double x= 20.22889909008;
int a = (int) x;

this will return a=20

或者试试这个:-

Double x = 20.22889909008;
Integer a = x.intValue();

this will return a=20

或者试试这个:-

double x= 20.22889909008;
System.out.println("===="+(int)x);

this will return ===20

可能这些代码会帮助你。

尝试使用 Math.floor。

在这个问题中:

1.将双精度转换为整数是非常容易的任务。

2.但它不会将双精度值四舍五入到最接近的小数。 因此铸造可以这样完成:

double d=99.99999999;
int i=(int)d;
System.out.println(i);

它将打印99 ,但尚未完成舍入。

因此,我们可以使用四舍五入,

double d=99.99999999;
System.out.println( Math.round(d));

这将打印100的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM