-- 作者:admin
-- 发布时间:2006/2/26 21:49:55
-- 程序代码——分数类(欢迎大家测试和探讨)
1、最为简单的分数类: public class Fraction { //分子 private long numerator; //分母 private long denominator; //构造函数 public Fraction() {} public Fraction(long n,long d) { setFraction(n,d); } //分子的设置方法 public void setNumerator(long n) { numerator=n; } //分子的读取方法 public long getNumerator() { return numerator; } //分母的设置方法,可以检查是否为零 public void setDenominator(long d) { if(d==0) denominator=1; else denominator=d; } //分母的读取方法 public long getDenominator() { return denominator; } //设置分数的方法 public void setFraction(long n,long d) { setNumerator(n); setDenominator(d); } //注意,此方法可以有效的解决负分数的显示问题,将负号放于最前面 public String toString() { if(numerator*denominator<0) return "-"+Math.abs(numerator)+"/"+Math.abs(denominator); else return Math.abs(numerator)+"/"+Math.abs(denominator); } }
测试程序为: public class exec { public static void main(String[] args) { Fraction f1=new Fraction(); f1.setNumerator(1); f1.setDenominator(2); System.out.println(f1); Fraction f2=new Fraction(2,3); System.out.println(f2); } }
2、支持对象比较的分数类: 添加新的方法:
//测试对象是否一样 public boolean equals(Fraction f) { if(numerator==f.numerator && denominator==f.denominator) return true; else return false; } //测试对象的大小,注意类型转换,否则会丢失精度 public boolean isGreater(Fraction f) { if((double)numerator/denominator>(double)f.numerator/f.denominator) return true; else return false; }
测试程序为: public class exec { public static void main(String[] args) { Fraction f1=new Fraction(1,2); Fraction f2=new Fraction(2,3); if(f1.equals(f2)) System.out.println("=="); if(f2.isGreater(f1)) System.out.println(">"); } }
3、支持约分和将小数转变为分数的分数类: 添加新的方法:
//将浮点型数值转换为相应的分数,思路为反复将浮点型数值乘以10,最终以得到整数为止,这个整数即为分子,连续相乘的数值为分母 public Fraction(double d) { long decimalCount=1; int dLen=String.valueOf(d).length(); for(int i=0;i<dLen;i++) { d=d*10; decimalCount*=10; } numerator=(long)d; denominator=decimalCount; Reduction(); }
//实现约分的方法,思路为把分子从大到小所有的数值分别和分母和分子同时相除,一旦两者皆能整除时,商即是约分后的结果 private void Reduction() { long minValue=Math.min(Math.abs(numerator),Math.abs(denominator)); for(long i=minValue;i>=1;i--) { if(numerator%i==0 && denominator%i==0) { numerator=numerator/i; denominator=denominator/i; break; } } }
测试程序为: public class exec { public static void main(String[] args) { Fraction f1=new Fraction(-12,-24); System.out.println(f1); Fraction f2=new Fraction(0.24); System.out.println(f2); } }
[此贴子已经被作者于2010-12-12 07:55:16编辑过]
|