/**
 * 判断一个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上去.判断doubleint转化

解决方案 »

  1.   

    正则表达式:    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+"存在小数,不可以转换为整数。");
            }
        }
      

  2.   


    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));
    }}
      

  3.   


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

  4.   

    这个用不着正则吧
    正则效率毕竟相对比较低
    以.分割一下或者除以1看是否有余数
    判断.之后的是否全是0不就可以了?
    int还有上限,上限的话用0判断大小就行了?
      

  5.   

    public boolean test(double d){
    return d==(int)d;
    }
    //返回true就是可转换的,返回false就是不可转换的。
      

  6.   

    需要你自己定义一个精度范围,比如对于一个 double 类型的变量 d:假如   Math.abs(d - 1) < 0.001 ,那么 变量 d 被替换成整数 1
      

  7.   

    如果有小数就不能准换,如果不是就能转换?boolean panduan(double d)
    {
        Double dd = d;
        if(dd.intValue() == dd)
             return true;
        return false;
    }
      

  8.   

    谢谢大家,明白了,采纳对1取余这个思路!然后采纳了,取值范围的条件-2147483648<d<2147483647,因为没有这个条件时候,这个例子就破坏了。// double a = 2147483648;// The literal 2147483648 of type int is out of range
    System.out.println(isInt2(Double.valueOf(args[0])));
    System.out.println(Integer.valueOf(args[0]));Exception in thread "main" java.lang.NumberFormatException: For input string: "2147483648"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
    at com.nyohh.calculator.Tools.main(Tools.java:9)
      

  9.   


    说实话,做一个计算器,在你选择 double 的时候,不知道你有没有想过数字精度的问题,不知道你有没有想过 double 不是精确数字类型。严格一点说,从你选择 double 类型来存储运算结果的时候,就已经错了。这贴给出的各种建议,正则也好,取余也好,没有一条提醒楼主这一点。简单的对 1 取余,看看下面这个简单的例子,你觉得它输出什么?
      public static void main(String[] args) {
        
        double n = 2.01 - 1.01;
        
        System.out.println( n % 1 == 0 );
      }
      

  10.   


    谢谢指出,学习完IO这块,我再重新写下四则的计算器,您提出这个问题很严重,我刚才看了下您举的这个例子结果。开始想double的原因很单纯,就是除法会出现小数,其它计算也免不了小数,就选了个double,我学习完这个专题,我再好好看看基础块,想想这个精度问题。这个帖子主要是解决最后显示一个数字的问题,如果是1.0之类的判断下显示1,不是的就显示小数。