如何在Jav ATW中使用Big Decimal

时间:2018-08-29 15:05:05

标签: java

package SI;

import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.math.*;
import java.math.BigDecimal;
import static oracle.jrockit.jfr.events.Bits.doubleValue;
import static oracle.jrockit.jfr.events.Bits.floatValue;
import static oracle.jrockit.jfr.events.Bits.intValue;

public class SI extends Frame implements ActionListener{
    TextField ptf,rtf,ttf,sitf,atf,citf,atf1;
    Button ab,sib,cib,ab1;
    Label pl,rl,tl,sil,al,cil,al1;
    SI(){
        pl=new Label("Principal:");
        pl.setBounds(15,50,50,20);
        ptf=new TextField();
        ptf.setBounds(150, 50, 150, 20);

        rl=new Label("Rate:");
        rl.setBounds(15,100,50,20);
        rtf=new TextField();
        rtf.setBounds(150, 100, 150, 20);

        tl=new Label("Time:");
        tl.setBounds(15,150,50,20);
        ttf=new TextField();
        ttf.setBounds(150, 150, 150, 20);

        sil=new Label("Simple Interest:");
        sil.setBounds(15,200,150,20);
        sitf=new TextField();
        sitf.setBounds(150, 200, 150, 20);
        sitf.setEditable(false);

        sib=new Button("Simple Interest");
        sib.setBounds(120,400,100,50);
        sib.addActionListener(this);

        cil=new Label("Compound Interest:");
        cil.setBounds(15,250,200,20);
        citf=new TextField();
        citf.setBounds(150, 250, 150, 20);
        citf.setEditable(false);

        cib=new Button("Compound Interest");
        cib.setBounds(240,400,130,50);
        cib.addActionListener(this);

        al=new Label("Amount of SI:");
        al.setBounds(15,300,200,20);
        atf=new TextField();
        atf.setBounds(150,300,150,20);
        atf.setEditable(false);

        ab=new Button("Amount of SI");
        ab.setBounds(20,400,80,50);
        ab.addActionListener(this);

        al1=new Label("Amount of CI:");
        al1.setBounds(300,300,200,20);
        atf1=new TextField();
        atf1.setBounds(390, 300, 150, 20);
        atf1.setEditable(false);

        ab1=new Button("Amount of CI");
        ab1.setBounds(390,400,80,50);
        ab1.addActionListener(this);


        add(pl);
        add(ptf);

        add(rtf);
        add(rl);

        add(ttf);
        add(tl);

        add(sitf);
        add(sil);
        add(sib);

        add(ab);
        add(atf);
        add(al);

        add(ab1);
        add(atf1);
        add(al1);

        add(cib);
        add(citf);
        add(cil);
        setSize(600,600);
        setLayout(null);
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String s1=ptf.getText();
        String s2=rtf.getText();
        String s3=ttf.getText();
        BigDecimal p=new BigDecimal("s1");
        BigDecimal r=new BigDecimal("s2");
        BigDecimal t=new BigDecimal("s3");
        BigDecimal si=new BigDecimal("0");
        BigDecimal a1=new BigDecimal("0");
        BigDecimal a11=new BigDecimal("0");
        BigDecimal b=new BigDecimal("");
        BigDecimal h=new BigDecimal("100");
        BigDecimal c=new BigDecimal("");
        BigDecimal i=new BigDecimal("1");
        BigDecimal d=new BigDecimal("0");
        BigDecimal j=new BigDecimal("0");
        BigDecimal g=d.subtract(p);
        if(e.getSource()==sib){
            b=p.multiply(r).multiply(t).divide(h);
        }else if(e.getSource()==cib){
            c=i.add(r).divide(h);
            j=c.pow(intValue(t));
            d=p.multiply(j);
            si=p.multiply(t).multiply(r).divide(h);
            a1=p.add(d);
        }else if(e.getSource()==ab){
            si=p.multiply(t).multiply(r).divide(h);
            a1=p.add(d);
        }else if(e.getSource()==ab1){
            c=i.add(r).divide(h);
            j=c.pow(intValue(t));
            d=p.multiply(j);
            si=p.multiply(t).multiply(r).divide(h);
            a1=p.add(d);
            a11=d.subtract(p);
        }
        String sit=String.valueOf(si);
        sitf.setText(String.valueOf(si));
        String at=String.valueOf(a1);
        atf.setText(at);
        String at1=String.valueOf(a11);
        atf1.setText(String.valueOf(a11));
        String cit=String.valueOf(d);
        citf.setText(String.valueOf(d));
    }
    public static void main(String[] args) {
        // TODO code application logic here
        new SI();
    }
}

此小程序不起作用。当我单击按钮时,它将引发错误。我将所有double都更改为BigDecimal后,此错误开始。请帮帮我。我被困在这里好几天了。这是什么错误。我对BigDecimal不太了解。我是新来的。请帮帮我。为什么会引发错误?

2 个答案:

答案 0 :(得分:1)

BigDecimal的构造函数不接受空字符串。

    BigDecimal b=new BigDecimal(""); //error
    BigDecimal c=new BigDecimal(""); //error

这些格式至少需要一个整数部分-请参阅源代码,它没有标记为可选。

来源:

答案 1 :(得分:0)

您必须传递变量,而不必将其称为String

您的代码,

BigDecimal p=new BigDecimal("s1");
BigDecimal r=new BigDecimal("s2");
BigDecimal t=new BigDecimal("s3");

应该是

 BigDecimal p=new BigDecimal(s1);
 BigDecimal r=new BigDecimal(s2);
 BigDecimal t=new BigDecimal(s3);

也正如我们的朋友先前所建议的那样,请勿为BigDecimal传递空值(“”),而将BigDecimal常量用于零和一,

BigDecimal d=BigDecimal.ZERO;
BigDecimal j=BigDecimal.ZERO;
BigDecimal i=BigDecimal.ONE;