我需要在Java中将double转换为int,但数值必须始终向下舍入.即99.99999999 - > 99
Xor*_*lev 134
转换为int会隐式删除任何小数.无需调用Math.floor()(假设为正数)
只需使用(int)进行类型转换,例如:
System.out.println((int)(99.9999)); // Prints 99
Run Code Online (Sandbox Code Playgroud)
这Math.floor就是说,它确实有一种不同的行为,从而朝向负无穷大(@Chris Wong)
Jav*_*rip 31
蒙上了双为int,并把它四舍五入到最接近的整数(即不同于典型的(int)(1.8)和(int)(1.2),这都将"四舍五入"向0和返回1),只需添加0.5到double你将强制转换为一个int.
例如,如果我们有
double a = 1.2;
double b = 1.8;
Run Code Online (Sandbox Code Playgroud)
然后x和y的以下类型转换表达式将返回向下舍入的值(x = 1和y = 1):
int x = (int)(a); // This equals (int)(1.2) --> 1
int y = (int)(b); // This equals (int)(1.8) --> 1
Run Code Online (Sandbox Code Playgroud)
但是通过向每个添加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
Run Code Online (Sandbox Code Playgroud)
作为一个小纸条,这种方法也可以让你控制的阈值,在其double被四舍五入后(int)类型转换.
(int)(a + 0.8);
Run Code Online (Sandbox Code Playgroud)
转向.只有(int)a + 1当十进制值大于或等于0.2时,才会向上舍入.也就是说,通过double在类型转换之前加上0.8,在类型转换时10.15和10.03将向下舍入到10 (int),但10.23和10.7将向上舍入到11.
Aus*_*ick 11
Math.floor(n)
Run Code Online (Sandbox Code Playgroud)
其中n是双精度数.这似乎实际上会返回一个双倍,所以请确保你之后进行类型转换.
| 归档时间: |
|
| 查看次数: |
240826 次 |
| 最近记录: |