在Java平臺中建立、使用分數類
阿新 • • 發佈:2019-01-31
由於計算機的執行機制不像人類的大腦,所以在計算時並不能無限精度地運算下去,只能在一定的進度範圍內進行數值求解。因此,至今計算機裡都沒有分數這種資料型別,不過我們為你可以藉助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); } }