在Java平台中创建、使用分数类

本文介绍了在Java中创建分数类以解决计算机无法无限精度计算分数的问题。通过自定义类,可以实现分数的计算和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  由于计算机的运行机制不像人类的大脑,所以在计算时并不能无限精度地运算下去,只能在一定的进度范围内进行数值求解。因此,至今计算机里都没有分数这种数据类型,不过我们为你可以借助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);
	}
}
里面涵盖了常用的分数的运算,直接将源文件放入包里,就可以使用这个类。有些地方考虑欠周,希望大家能予以指正。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值