主要涉及到精确度的问题以及BigDecimal函数的使用
但是需要注意的是在考虑除法的时候如果小数点后是无限要解决否则会报错。
import com.sun.deploy.security.SelectableSecurityManager;
import java.math.BigDecimal;
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner reader =new Scanner(System.in);
double a1,b1;
double a2,b2;
a1=reader.nextDouble();
b1=reader.nextDouble();
a2=reader.nextDouble();
b2=reader.nextDouble();
complexNumber N = new complexNumber(a1, b1, a2, b2);
N.complexNumberAddition(); //加
N.printInfo();
N.complexNumberSubtraction(); //减
N.printInfo();
N.complexNumberMultiplication(); //乘
N.printInfo();
N.complexNumberDivisionMethod(); //除
N.printInfo();
}
}
class complexNumber{
double a1; //第一个复数实部
double b1; //第一个复数虚部
double a2; //第二个复数实部
double b2; //第二个复数虚部
double real;
double image;
complexNumber(double a1,double b1,double a2,double b2){
this.a1=a1;
this.b1=b1;
this.a2=a2;
this.b2=b2;
}
void complexNumberAddition(){ //复数加法
real=a1+a2;
image=b1+b2;
}
void complexNumberSubtraction(){ //复数减法
BigDecimal a1= new BigDecimal(Double.toString(this.a1));
BigDecimal a2= new BigDecimal(Double.toString(this.a2));
BigDecimal b1= new BigDecimal(Double.toString(this.b1));
BigDecimal b2 =new BigDecimal(Double.toString(this.b2));
image=b1.subtract(b2).doubleValue();
real=a1.subtract(a2).doubleValue();
}
void complexNumberMultiplication(){ //复数相乘
BigDecimal a = new BigDecimal(Double.toString(a1*a2));
BigDecimal b = new BigDecimal(Double.toString(b1*b2));
real=a.subtract(b).doubleValue();
image=a1*b2+a2*b1;
}
void complexNumberDivisionMethod(){ //复数相除
BigDecimal a = new BigDecimal(Double.toString(this.a2*this.b1));
BigDecimal b= new BigDecimal(Double.toString(this.a1*this.b2));
BigDecimal c=new BigDecimal(Double.toString(a.subtract(b).doubleValue()));
BigDecimal d =new BigDecimal(Double.toString(this.a2*this.a2+this.b2*this.b2));
BigDecimal e= new BigDecimal(Double.toString(this.a1*this.a2+this.b1*this.b2));
real=e.divide(d,3,BigDecimal.ROUND_DOWN).doubleValue();
image=c.divide(d,3,BigDecimal.ROUND_DOWN).doubleValue();
}
void printInfo() { //输出
if (real != 0) {
if (image < 0)
System.out.println(real + image + "i");
else if (image > 0)
System.out.println(real + "+" + image + "i");
else
System.out.println(real);
} else
System.out.println(image + "i");
}
}