编写了一个计算器类,程序如下
/*
 * 计算器类
 */
public class Caculator {

int num1; //第一个数
int num2; //第二个数
int number; //计算结果
/*
 * 运算方法
 */
public int Add(){ //定义加法
number = num1 + num2; //计算表达式
return number; //返回值,即为计算结果
}
public int Minus(){ //定义减法
number = num1 - num2; //表达式
return number; //返回差的结果
}
public int Multiple(){ //定义乘法
number = num1 * num2; //表达式
return number; //返回积的结果
}
public double Divide(){ //定义除法
number = num1 / num2; //表达式
return number; //返回商的结果
}

}import java.util.*;
public class TestCaculator {
/*
 *测试计算器类 
 */
public static void main(String[] args){
Scanner input = new Scanner(System.in);
Caculator No = new Caculator(); //创建Caculator类的对象
System.out.print("请输入第一个数:");
No.num1 = input.nextInt(); //控制台输入第一个数
System.out.print("请输入第二个数:");
No.num2 = input.nextInt(); //控制台输入第二个数
No.Add(); //调用加法
System.out.println("和为:" + No.Add()); //输出和
No.Minus(); //调用减法
System.out.println("差为:" + No.Minus()); //输出差
No.Multiple(); //调用乘法
System.out.println("积为:" + No.Multiple()); //输出积
No.Divide(); //调用除法
System.out.println("商为:" + No.Divide()); //输出商
}
}运行程序后发现当num1小于num2的整数情况下,商的结果总为0.0,请教哪里出问题了?

解决方案 »

  1.   

    两个整数相除 结果取整
    你把num1 num2 设为 浮点型的就可以了
      

  2.   

    因为你的num1和num2都是int,所以Java很智能的把结果自动 强制类型转换为 int,所以就是0了。想看到小数的话,请不要用int,全都改double吧。不过,你可能又会碰到让你发狂的二进制小数的精度问题,呵呵呵呵
      

  3.   

    你可以做个异常处理
     Scanner in=new Scanner(System.in);
      

  4.   

    不是强制转为int 吧,应该是int自动转double吧。
    至于出现0.0我认为是输入的两个数字相差小,以至于得到到的结果是零点几,然后对int而言零点几就是取值为零,再自动转型为double就为0.0了
      

  5.   

    其实这是你的除法出了问题,下面给你分析两个错误所在,改过来就能正常使用:public double Divide(){ 
      number = num1 / num2; //问题1:接收结果的number为int型,你怎么能指望输出小数?所以number要换成float或double
      //问题2:还是上面这行代码,num1/num2计算过程中会按num1的类型去自动做类型转换,所以num1你要强转成float或者double类型
      return number; 
    }
    下面给出修改后的代码double number; //接收结果的参数改成double类型,或者你再定义一个double number2来接收除数的结果
    public double Divide(){ 
      number = (double)num1 / num2; //这里把num1强转成double类型,计算过程中就会按照double去保存结果(否则计算的过程中就会自动转换成int型,就算number是double类型无法得到小数)
      return number; 
    }