1. 程式人生 > >在Java平臺中建立、使用分數類

在Java平臺中建立、使用分數類

  由於計算機的執行機制不像人類的大腦,所以在計算時並不能無限精度地運算下去,只能在一定的進度範圍內進行數值求解。因此,至今計算機裡都沒有分數這種資料型別,不過我們為你可以藉助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);
	}
}
裡面涵蓋了常用的分數的運算,直接將原始檔放入包裡,就可以使用這個類。有些地方考慮欠周,希望大家能予以指正。