Java双精度转换为Int-round
当且仅当点后的两个数字为0时,我想将双精度值转换为int 示例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); //
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;
}