当和仅当点后面的2个数字为0时,我想将double值转换为int。
示例
double x = 25.001
答案 0 :(得分:1)
您可以使用:
double x = 25.001;
int i = (int) x;
System.out.println(x);//Input
if (x - i <= 0.01) {
x = (int) x;
}
System.out.println(x);//Output
<强> RESULT 强>
Input Output
25.001 25.0
25.011 25.011
如果您想使用第二个变量,可以使用:
int y = 0;
if (x - i <= 0.01) {
y = (int) x;
}
注意强>
但请注意,如果您的输入不正确,您将始终获得0,我喜欢第一个解决方案,然后是第二个解决方案。
答案 1 :(得分:0)
如果(X-的Integer.parseInt(X)&GT; = 0.001) //转换到这里
答案 2 :(得分:0)
这个四舍五入的数字无法存储在double
中,因为double
总是一个实际值的近似值 - 一系列(负)幂2。
所以你应该去BigDecimal
尽可能多地去做财务软件。
如果你做了类似的事情:
double adjustWhenCloseToInt(double x) {
long n = Math.round(x); // Could overflow for large doubles
if (Math.abs(x - n) < 0.01) {
x = n;
}
return x;
}
一个简单的
x = adjustWhenCloseToInt(x);
System.out.print(x);
仍然可以打印0.00000001等。
那里有解决方案
System.out.printf("%.2f", x);
或者更好地使用本地化的 MessageFormat (千位分隔符等)。
由于浮点始终存在舍入误差,我一般会选择BigDecimal,尽管它是一个使用的间接类。注意使用String构造函数:
new BigDecimal("3.99");
因为他们可以保持2的精度。