由于计算机的运行机制不像人类的大脑,所以在计算时并不能无限精度地运算下去,只能在一定的进度范围内进行数值求解。因此,至今计算机里都没有分数这种数据类型,不过我们为你可以借助Java类来自行定义分数类,进行分数的相关计算。
下面直接给代码:
public class Fraction
{
int numerator;
int denominator;
double value;
//构造器
public Fraction(int a,int b)
{
if(b!=0)
{
numerator=a;
denominator=b;
value=(double)a/(double)b;
}
else
{
System.out.println("输入有误!");
}
}
//求最大公约数
private int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
//将实数转化为分数(精确到小数点后7位)
private Fraction doubleTofraction(double a)
{
return new Fraction((int)(a*Math.pow(10,7)),(int)(Math.pow(10,7)));
}
//取倒数
public Fraction inverse()
{
return new Fraction(denominator,numerator);
}
//约分
public void reduction()
{
int gcd=gcd(numerator,denominator);
numerator/=gcd;
denominator/=gcd;
value=(double)numerator/(double)denominator;
}
//显示分数
public void fractionPrint()
{
this.reduction();
if(numerator%denominator==0)
System.out.println(numerator/denominator);
else
System.out.println(numerator+"/"+denominator);
}
//显示整数
public void intPrint()
{
this.reduction();
if(numerator%denominator==0)
System.out.println((int)value);
else
System.out.println("无法转换成整数!");
}
//显示实数
public void doublePrint()
{
this.reduction();
System.out.println(value);
}
//加法
//与分数加法
public Fraction add(Fraction f)
{
return new Fraction(numerator*f.denominator+f.numerator*denominator,denominator*f.denominator);
}
//与整数加法
public Fraction add(int a)
{
return new Fraction(numerator+a*denominator,denominator);
}
//与实数加法
public Fraction add(double a)
{
return this.add(doubleTofraction(a));
}
//减法
//与分数减法
public Fraction minus(Fraction f)
{
return new Fraction(numerator*f.denominator-f.numerator*denominator,denominator*f.denominator);
}
//与整数减法
public Fraction minus(int a)
{
return new Fraction(numerator-a*denominator,denominator);
}
//与实数减法
public Fraction minus(double a)
{
return this.minus(doubleTofraction(a));
}
//乘法
//与分数乘法
public Fraction multiply(Fraction f)
{
return new Fraction(numerator*f.numerator,denominator*f.denominator);
}
//与整数乘法
public Fraction multiply(int a)
{
return new Fraction(numerator*a,denominator);
}
//与实数乘法
public Fraction multiply(double a)
{
return this.multiply(doubleTofraction(a));
}
//除法
//与分数除法
public Fraction division(Fraction f)
{
return multiply(f.inverse());
}
//与整数除法
public Fraction division(int a)
{
return multiply(new Fraction(1,a));
}
//与实数除法
public Fraction division(double a)
{
return this.division(doubleTofraction(a));
}
//幂运算
//整数次幂
public Fraction pow(int n)
{
return new Fraction((int)(Math.pow(numerator, n)),(int)(Math.pow(denominator, n)));
}
//实数次幂
public Fraction pow(double n)
{
return doubleTofraction(Math.pow(numerator, n)/Math.pow(denominator, n));
}
//分数次幂
public Fraction pow(Fraction f)
{
return pow((double)f.numerator/(double)f.denominator);
}
}
里面涵盖了常用的分数的运算,直接将源文件放入包里,就可以使用这个类。有些地方考虑欠周,希望大家能予以指正。