2

基本的な質問があります。私はプログラミングが本当に苦手です。回答フィールドに小数点以下 2 桁までの回答を表示しようとしています。JTextFields と JRadioBtn セットがあります。答えが自分の面積または周囲に来ると、小数点以下の桁数がたくさんあります。小数点以下2桁を四捨五入するだけです。これが私がこれまでに持っているコードです:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import static java.lang.Math.*;

public class Triangle extends JFrame
{
private GridBagLayout layout = new GridBagLayout();
private GridBagConstraints constraints = new GridBagConstraints();
JTextField firstNumberTxt, secondNumberTxt, thirdNumberTxt, answerTxt;
JRadioButton addBtn, subBtn, multBtn, divBtn;
JButton calculateBtn, exitBtn;

public ExamQuestion2()
{
    super( "A Simple Calculator Form." );
    firstNumberTxt = new JTextField( 5 );
    secondNumberTxt = new JTextField( 5 );
    answerTxt = new JTextField( 5 );
    addBtn = new JRadioButton( "area", true );
    subBtn = new JRadioButton( "perimeter", false );

    calculateBtn = new JButton( "cal" +
                "calculate" );
    exitBtn = new JButton( "exit" );

    JLabel firstNumberLbl = new JLabel( "Base: "),
            operationLbl = new JLabel( "Operation "),
            secondNumberLbl = new JLabel( "Height: "),
            answerLbl =new JLabel( "Answer: ");

    setLayout( layout );
    addComponent( firstNumberLbl, 0, 0, 1, 1, GridBagConstraints.EAST );
    addComponent( firstNumberTxt, 0, 1, 1, 1, GridBagConstraints.WEST );
    addComponent( operationLbl, 1, 0, 1, 4, GridBagConstraints.CENTER );
    addComponent( addBtn, 1, 1, 1, 1, GridBagConstraints.WEST );
    addComponent( subBtn, 2, 1, 1, 1, GridBagConstraints.WEST );
    addComponent( secondNumberLbl, 5, 0, 1, 1, GridBagConstraints.EAST );
    addComponent( secondNumberTxt, 5, 1, 1, 1, GridBagConstraints.WEST );
    addComponent( answerLbl, 6, 0, 1, 1, GridBagConstraints.EAST );
    addComponent( answerTxt, 6, 1, 1, 1, GridBagConstraints.WEST );
    addComponent( calculateBtn, 7, 0, 1, 1, GridBagConstraints.EAST );
    addComponent( exitBtn, 7, 1, 1, 1, GridBagConstraints.WEST );

    calculateBtn.addActionListener( new Calculator() );
    exitBtn.addActionListener( new Exiter() );
}

private void addComponent( Component component, int row, int column, int width, int height, int anch )
{
    constraints.gridx = column;
    constraints.gridy = row;
    constraints.gridwidth = width;
    constraints.gridheight = height;
    constraints.anchor = anch;
    constraints.weighty = 5;
    add( component );
    layout.setConstraints( component, constraints );
}

private class Calculator implements ActionListener
{
    public void actionPerformed( ActionEvent event )
    {
        String firstString, secondString;
        int choice;
        int firstNumber, secondNumber;

        firstString = firstNumberTxt.getText();
        secondString = secondNumberTxt.getText();
        if( firstString.length() < 1 || secondString.length() < 1)
        {
            answerTxt.setText( " INVALID" );
            return;
        }
        firstNumber = Integer.parseInt( firstString );
        secondNumber = Integer.parseInt( secondString );

        if( addBtn.isSelected() )
        {
            choice = 0;
            subBtn.setSelected( false );
        }
        if( addBtn.isSelected() ) choice = 0;
        else if( subBtn.isSelected() ) choice = 1;
        else if( multBtn.isSelected() ) choice = 2;
        else choice = 3;

        switch ( choice )
        {
        case 0: answerTxt.setText( ( (firstNumber * secondNumber) / 2 ) +     "" ); break;
        case 1: answerTxt.setText( ( firstNumber + secondNumber + sqrt(     (firstNumber * firstNumber) + 
                (secondNumber * secondNumber))) + "" ); break;
        default: if ( secondNumber != 0 )
                {
                    answerTxt.setText( ( firstNumber /     secondNumber ) + "" ); break;
                }
        else answerTxt.setText( " INVALID " ); break;

        }
    }
}

public static void main(String[] args) 
{
    Triangle MyCalculator= new Triangle();
    MyCalculator.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    MyCalculator.setSize( 300, 300 );
    MyCalculator.setLocationRelativeTo(null);
    MyCalculator.setVisible( true );
}

private class Exiter implements ActionListener
{
    public void actionPerformed( ActionEvent event)
    {
        System.exit(0);
    }
}
}

ネットで見つけたいくつかのことを調べて試しましたが、何も正しく機能しないようです。誰か助けて?

4

3 に答える 3

4

試してみてくださいNumberFormat.getCurrencyInstance()ここに関連する例があります。

于 2012-12-18T01:33:13.480 に答える
2

使用してみてください:

String.format("%.2f", numberToBeRounded);

たとえば、次の行を次のように置き換えることができますcase 0

case 0: answerTxt.setText( String.format("%.2f", (firstNumber * secondNumber) / 2 ) ); break;

書式指定子は、%.2f小数点以下 2 桁に丸められた浮動小数点数を表示します。フォーマットされた文字列の詳細については、フォーマッターのドキュメントを参照してください。

于 2012-12-18T01:27:24.900 に答える
1

数値の表示に加えて、コードから離れて、数値計算のニーズについてクラスをNumberFormat確認することをお勧めします。BigDecimalスケールBigDecimal(BigInteger unscaledVal, int scale)を設定して、数値計算を効果的に (正しく読み取って) 実行できます。

于 2012-12-18T01:40:29.423 に答える