读书人

求个思路判断double是否能转化作int

发布时间: 2013-08-04 18:26:16 作者: rapoo

求个思路,判断double是否能转化为int(例:1.0是可以转化为1,1.01是不能被转化的)


/**
* 判断一个double能否转换为一个int
* @param num double
* @return boolean
*/
public static boolean doubleIsInt(double num)
{
Boolean flag = false;// 没碰到小数点时候标记是false
int n = 0;// 计数器

char[] charArray = String.valueOf(num).toCharArray();

for (char c : charArray)
{
if (c == '.')
{
flag = true;
continue;
}
if (flag && Integer.valueOf(String.valueOf(c)) > 0)
{
n++;
}
}

if (n > 0)
{
return false;
}

return true;
}

思路:把double转化为字符串,拆分成字符,匹配“.”后面是否有非零数字,有了就是不能转化为int,没就是能


这是我昨晚睡觉前自己写的能用但是觉得很笨,有没巧妙点方法!

在写作业,写个计算器,因为里面两个数字都预设为了double,最后出现结果时候出现的1.0之类的很不爽,所以想判断下是能转换的了转换为整数,显示到TextField上去. 判断 double int 转化
[解决办法]
正则表达式:

public static void main(String[] args)
{
//double转换为String
double d1 = 1.0000001;
double d2 = 1.0000000;
String strD1 = String.valueOf(d1);
String strD2 = String.valueOf(d2);

//正则式
String regex = "^(\\d+)\\.?[0]*$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(strD1);
if(m.matches())
{


System.out.println(strD1+"可以转换为整数:"+m.group(1));
}
else
{
System.out.println(strD1+"存在小数,不可以转换为整数。");
}

m = p.matcher(strD2);
if(m.matches())
{
System.out.println(strD2+"可以转换为整数:"+m.group(1));
}
else
{
System.out.println(strD2+"存在小数,不可以转换为整数。");
}
}


[解决办法]

public class TestCt {

public static String getNumberStr(double d) {
int i = (int)d;
if (i == d) {
return String.valueOf(i);
} else {
return String.valueOf(d);
}
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(getNumberStr(1.0));
System.out.println(getNumberStr(1.01));
}

}

[解决办法]

public static boolean isInt(double value){
return (value % 1d) == 0d;
}

[解决办法]
需要你自己定义一个精度范围,比如对于一个 double 类型的变量 d:

假如 Math.abs(d - 1) < 0.001 ,那么 变量 d 被替换成整数 1

读书人网 >J2SE开发

热点推荐