在Java中,我想将double转换为整数,我知道如果你这样做:
double x = 1.5;
int y = (int)x;
你得到y = 1。如果你这样做:
int y = (int)Math.round(x);
你可能会得到2.但是,我想知道:因为整数的双重表示有时看起来像1.9999999998或其他东西,是否有可能投射通过Math.round()创建的双重仍然会导致截断数字,而不是我们正在寻找的舍入数字(即:代表代码中的1而不是2)?
(是的,我的意思是这样:x是否有任何值,其中y将显示截断的结果而不是x的圆角表示?)
如果是这样的话:是否有更好的方法可以将双重转换为舍入的int而不会有截断的风险?
想象一下:Math.round(x)返回一个long,而不是double。因此:Math.round()不可能返回一个看起来像3.9999998的数字。因此,int(Math.round())将永远不需要截断任何内容并始终有效。
答案 0 :(得分:89)
是否有可能投放通过
Math.round()
创建的双精度数仍然会导致截断的数字
不,round()
将总是将你的双精度值舍入到正确的值,然后,它将被强制转换为long
,这将截断任何小数位。但在四舍五入后,将不会有任何小数部分。
以下是Math.round(double)
的文档:
返回与参数最接近的long。结果通过添加1/2舍入为整数,取结果的最低值,并将结果转换为long类型。换句话说,结果等于表达式的值:
(long)Math.floor(a + 0.5d)
答案 1 :(得分:22)
对于数据类型Double
到int
,您可以使用以下内容:
Double double = 5.00;
int integer = double.intValue();
答案 2 :(得分:8)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
解决了我的目的。
答案 3 :(得分:-9)
double a = 1.450;
String sa = String.valueOf(a);
int lengthUntilPoint = sa.indexOf(".")+1;
int power = sa.length() - lengthUntilPoint;
int ia = (int) (a* Math.pow(10, power));