Java中使用Rational类实现分数精确的计算,

Java中使用Rational类实现分数精确的计算,

在Java中实现分数的精确计算(Rational类)

在Java中想要进行有分数精确的计算,例如1/3=0.33333333…,这个数字不能用double或float来精确的表示浮点形式。为了获得精确地结果,必须使用有理数。

运行截图

链接: link.

图片: 在这里插入图片描述在这里插入图片描述分数的计算结果

Rational类代码如下

public class Rational extends Number implements Comparable {

	// 定义私有型分子
	private long numerator = 0;
	// 定义私有性分母
	private long denominator = 1;

	public Rational() {
		this(0, 1);
	}

	public Rational(long numerator, long denominator) {

		long gcd = gcd(numerator, denominator);
		this.numerator = ((denominator > 0) ? 1 : -1) * numerator / gcd;
		this.denominator = Math.abs(denominator) / gcd;
	}

	private long gcd(long n, long d) {
		// TODO Auto-generated method stub
		long n1 = Math.abs(n);
		long n2 = Math.abs(d);
		int gcd = 1;

		for (int k = 1; k <= n1 && k <= n2; k++) {
			if (n1 % k == 0 && n2 % k == 0) {
				gcd = k;
			}
		}

		return gcd;
	}

	public long getNumerator() {
		return numerator;
	}

	public long getDenominator() {
		return denominator;
	}

	// 分数的加法
	public Rational add(Rational secondRational) {
		long n = numerator * secondRational.getDenominator() + denominator * secondRational.getNumerator();
		long d = denominator * secondRational.getDenominator();
		return new Rational(n, d);
	}

	// 分数的减法
	public Rational subtract(Rational secondRational) {
		long n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator();
		long d = denominator * secondRational.getDenominator();
		return new Rational(n, d);
	}

	// 分数乘法
	public Rational mulitiply(Rational secondRational) {
		long n = numerator * secondRational.getNumerator();
		long d = denominator * secondRational.getDenominator();
		return new Rational(n, d);

	}

	// 分数除法
	public Rational divide(Rational secondRational) {
		// TODO Auto-generated method stub
		long n = numerator * secondRational.getDenominator();
		long d = denominator * secondRational.numerator;
		return new Rational(n, d);
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub

		if (denominator == 1) {
			return numerator + "";
		} else {
			return numerator + "/" + denominator;
		}

	}

	@Override
	public boolean equals(Object parm1) {
		// TODO Auto-generated method stub
		if ((this.subtract((Rational) (parm1))).getNumerator() == 0) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		if ((this.subtract((Rational) o)).getNumerator() > 0) {
			return 1;
		} else if ((this.subtract((Rational) o)).getNumerator() > 0) {
			return -1;
		} else {
			return 0;
		}

	}

	@Override
	public double doubleValue() {
		// TODO Auto-generated method stub
		return numerator * 1.0 / denominator;
	}

	@Override
	public float floatValue() {
		// TODO Auto-generated method stub
		return (float) doubleValue();
	}

	@Override
	public int intValue() {
		// TODO Auto-generated method stub
		return (int) doubleValue();
	}

	@Override
	public long longValue() {
		// TODO Auto-generated method stub
		return (long) doubleValue();
	}
}

测试类代码如下

TestRational类

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Rational r1 = new Rational(1, 3);
		Rational r2 = new Rational(1, 2);
		Rational r3 = new Rational(1, 4);
		System.out.println(r1 + " + " + r2 + " = " + r1.add(r2));
		System.out.println(r1 + " - " + r2 + " = " + r1.subtract(r2));
		System.out.println(r1 + " * " + r2 + " = " + r1.mulitiply(r2));
		System.out.println(r1 + " / " + r2 + " = " + r1.divide(r2));
		System.out.println(r1 + " + " + r2 + " + " + r3 + " = " + (r1.add(r2)).add(r3));
	}

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 Java 实现 Rational 类的代码: ```java public class Rational { private int numerator; private int denominator; public Rational(int numerator, int denominator) { if (denominator == 0) { throw new IllegalArgumentException("denominator can not be zero"); } int gcd = gcd(numerator, denominator); this.numerator = numerator / gcd; this.denominator = denominator / gcd; } public Rational add(Rational other) { int newNumerator = this.numerator * other.denominator + other.numerator * this.denominator; int newDenominator = this.denominator * other.denominator; return new Rational(newNumerator, newDenominator); } public Rational subtract(Rational other) { int newNumerator = this.numerator * other.denominator - other.numerator * this.denominator; int newDenominator = this.denominator * other.denominator; return new Rational(newNumerator, newDenominator); } public Rational multiply(Rational other) { int newNumerator = this.numerator * other.numerator; int newDenominator = this.denominator * other.denominator; return new Rational(newNumerator, newDenominator); } public Rational divide(Rational other) { int newNumerator = this.numerator * other.denominator; int newDenominator = this.denominator * other.numerator; return new Rational(newNumerator, newDenominator); } private int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } @Override public String toString() { return numerator + "/" + denominator; } } ``` 在这个实现,我们定义了一个有理数(Rational)类,它包含两个私有变量 numerator 和 denominator,分别表示分子和分母。我们还提供了四个基本的算术运算方法,分别是加、减、乘、除。在构造方法,我们使用辗转相除法求出分子和分母的最大公约数,并将有理数化简为最简形式。最后,我们重写了 toString 方法,以便于输出有理数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值