Java Double转换为Int round

时间:2017-04-23 12:57:11

标签: java int double

当和仅当点后面的2个数字为0时,我想将double值转换为int。

示例

double x = 25.001

3 个答案:

答案 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的精度。