Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java双精度转换为Int-round_Java_Int_Double - Fatal编程技术网

Java双精度转换为Int-round

Java双精度转换为Int-round,java,int,double,Java,Int,Double,当且仅当点后的两个数字为0时,我想将双精度值转换为int 示例 double x=25.001如果(x-Integer.parseInt(x)>=0.001) //在这里转换成不能存储在double中的四舍五入数字,因为double始终是实数的近似值-一系列2的(负)幂 所以你应该像很多想做金融软件的人一样,选择BigDecimal 如果您做了如下操作: double adjustWhenCloseToInt(double x) { long n = Math.round(x); //

当且仅当点后的两个数字为0时,我想将双精度值转换为int

示例

double x=25.001
如果(x-Integer.parseInt(x)>=0.001)
//在这里转换成不能存储在
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;
}
仍然可以打印0.00000001或更高版本

解决办法是

System.out.printf("%.2f", x);
或者最好使用本地化的消息格式(千个分隔符等)

由于浮点总是带有舍入错误,我通常会选择BigDecimal,尽管它是一个环境类。注意使用字符串构造函数:

new BigDecimal("3.99");
因为它们可以保持2的精度。

您可以使用:

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

如果要使用第二个变量,可以使用:

int y = 0;
if (x - i <= 0.01) {    
    y = (int) x;
}
inty=0;

如果(x-i)正常,是什么阻止了你这么做?有什么具体问题吗?
Input                Output
25.001               25.0
25.011               25.011
int y = 0;
if (x - i <= 0.01) {    
    y = (int) x;
}