计算器不能有十进制

时间:2015-10-17 23:29:27

标签: java decimal calculator

我的代码现在适用于求和,减法,倍数,除法。 但是,当我放置10.0和2.0或5.4和2时,它不显示小数。 我应该如何改变,然后它可以用于小数?

这是我现在的代码。

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class Calculator extends JFrame implements ActionListener {

    // instance variables
    JLabel num1Label = null;
    JTextField num1Text = null;
    JLabel num2Label = null;
    JTextField num2Text = null;
    JButton sumButton = null;
    JButton multipleButton=null;
    JButton divideButton=null;
    JButton subtractButton = null;
    JLabel ansLabel = null;

    // constructor
    public Calculator() {
        setLayout(new GridBagLayout());    // set layout (how elements are arranged in window)
        // ****  label:  num 1
        GridBagConstraints layoutCon = new GridBagConstraints();
        layoutCon.gridx = 0;
        layoutCon.gridy = 0;
        layoutCon.insets = new Insets(10,10,10,10);

        num1Label = new JLabel("Num 1:");
        add(num1Label,layoutCon);   // added label to JFrame


        // ****  text field:  num 1
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 1;
        layoutCon.gridy = 0;
        layoutCon.insets = new Insets(10,10,10,10);

        num1Text = new JTextField(20);
        add(num1Text, layoutCon);

        // ****  label:  num 2
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 0;
        layoutCon.gridy = 1;
        layoutCon.insets = new Insets(10,10,10,10);

        num2Label = new JLabel("Num 2:");
        add(num2Label,layoutCon);   // added label to JFrame


        // ****  text field: num 2
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 1;
        layoutCon.gridy = 1;
        layoutCon.insets = new Insets(10,10,10,10);

        num2Text = new JTextField(20);
        add(num2Text, layoutCon);




        // ****  Sum Button
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 0;
        layoutCon.gridy = 2;
        layoutCon.insets = new Insets(10,10,10,10);

        sumButton = new JButton("Sum");
        add(sumButton, layoutCon);
        sumButton.addActionListener(this);  // register sumButton with the ActionListener in Calculator

        // Multiple Button
        layoutCon= new GridBagConstraints();
        layoutCon.gridx=0;
        layoutCon.gridy=4;
        layoutCon.insets=new Insets(10,10,10,10);

        multipleButton= new JButton("Multiple");
        add(multipleButton, layoutCon);
        multipleButton.addActionListener(this);

        // Divide Button
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 0;
        layoutCon.gridy = 5;
        layoutCon.insets = new Insets(10,10,10,10);

        divideButton = new JButton("Divide");
        add(divideButton, layoutCon);
        divideButton.addActionListener(this);

        // ****  label:  answer
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 1;
        layoutCon.gridy = 2;
        layoutCon.insets = new Insets(10,10,10,10);

        ansLabel = new JLabel("Answer");
        add(ansLabel,layoutCon);   // added label to JFrame  





        // ****  Subtract Button
        layoutCon = new GridBagConstraints();
        layoutCon.gridx = 0;
        layoutCon.gridy = 3;
        layoutCon.insets = new Insets(10,10,10,10);

        subtractButton = new JButton("Subtract");
        add(subtractButton, layoutCon);
        subtractButton.addActionListener(this);  // register subtractButton with the ActionListener in Calculator

    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Sum")) {
            ansLabel.setText("" + (Integer.parseInt(num1Text.getText()) + Integer.parseInt(num2Text.getText())));
        }
        else if (e.getActionCommand().equals("Subtract")) {
            ansLabel.setText("" + (Integer.parseInt(num1Text.getText()) - Integer.parseInt(num2Text.getText())));
        }
        else if (e.getActionCommand().equals("Multiple")){
            ansLabel.setText(""+(double)(Integer.parseInt(num1Text.getText())*Integer.parseInt(num2Text.getText())));
        }
        else if (e.getActionCommand().equals("Divide")){
            ansLabel.setText(""+(Integer.parseInt(num1Text.getText())/Integer.parseInt(num2Text.getText())));

        }
        }

    public static void main(String[] args) {
        Calculator calc = new Calculator();

        calc.pack();    // resizes window (JFrame) so you can see the elements in it
        calc.setVisible(true);   // make window visible
        calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //exit program when close window
    }

}

5 个答案:

答案 0 :(得分:1)

actionPerformed正在将其输入解析为int并对其进行操作。如果您想使用浮点数,请尝试使用double

答案 1 :(得分:1)

作为整数解析不能处理double或任何浮点数(十进制),因此将actionPerformed更改为解析double或者解析int:

public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Sum")) {
        ansLabel.setText("" + (Double.parseDouble(num1Text.getText()) + Double.parseDouble(num2Text.getText())));
    }
    else if (e.getActionCommand().equals("Subtract")) {
        ansLabel.setText("" + (Double.parseDouble(num1Text.getText()) - Double.parseDouble(num2Text.getText())));
    }
    else if (e.getActionCommand().equals("Multiple")){
        ansLabel.setText(""+(double)(Double.parseDouble(num1Text.getText())*Double.parseDouble(num2Text.getText())));
    }
    else if (e.getActionCommand().equals("Divide")){
        ansLabel.setText(""+(Double.parseDouble(num1Text.getText())/Double.parseDouble(num2Text.getText())));

    }
}

答案 2 :(得分:0)

你应该使用double数据类型而不是整数来进行4次操作

答案 3 :(得分:0)

像这样:

   public void actionPerformed( ActionEvent e )
   {
      if( e.getActionCommand().equals( "Sum" ) )
         ansLabel.setText( "" + ( Double.
                 parseDouble(num1Text.getText() ) + Double.parseDouble( 
                         num2Text.getText() ) ) );
   // etc.

答案 4 :(得分:0)

您使用

Integer.parseInt(num1Text.getText());

String解析为int。

使用

Double.parseDouble(num1Text.getText());

你得到双倍。

请注意,您可能想要抓住NumberFormatException,因为您最不希望您的程序因格式错误的用户输入而停止:

double num1;
try
{
    num1 = Double.parseDouble(num1Text.getText());
} catch (NumberFormatException e)
{
    // either use a default value or give feedback to the user on what he did wrong
    // for example
    num1 = 1;
}

如果您不想打印double值,如果用户只输入整数值,那么您可以先尝试解析为int,捕获异常(如果有)然后解析为double。

你的分界线中的另一个错误:

ansLabel.setText(
    ""+(Integer.parseInt(num1Text.getText())/Integer.parseInt(num2Text.getText())));

您不检查第二个参数是否为!= 0,否则您可能除以0!

为了使代码更具可读性,您可能需要创建一个额外的方法来将String解析为数字:

private static double parseDouble(String s)
{
    double num;
    try
    {
        num = Double.parseDouble(num1Text.getText());
    } catch (NumberFormatException e)
    {
        // either use a default value or give feedback to the user on what he did wrong
        // for example
        num = 1;
    }

    return num;
}

除以0的可能修复方法可能是:

double num1 = parseDouble(num1Text.getText());
double num2 = parseDouble(num2Text.getText());

String command = e.getActionCommand();

if (command.equals("Sum"))
{
    ansLabel.setText("" + (num1 + num2));
} else if (command.equals("Subtract"))
{
    ansLabel.setText("" + (num1 - num2));
} else if (command.equals("Multiple"))
{
    ansLabel.setText("" + (num1 * num2));
} else if (command.equals("Divide"))
{
    if (num2 == 0)
    {
        ansLabel.setText("ERROR: Division by zero!");
    } else
    {
        ansLabel.setText("" + (num1 / num2));
    }
}