在Java中,表示分数主要有以下两种方式:
一、使用基本数据类型(推荐用于简单场景)
浮点数表示 直接使用`double`类型存储分数值,例如`double score = 98.5;`,适合需要小数精度的情况。
二、使用自定义类(推荐用于精确计算)
Fraction类设计
- 属性: 分子(`num`)和分母(`den`)均为`int`类型。 - 构造函数
- 核心方法
- `doublevalue()`:将分数转换为`double`类型。
- `plus(Fraction r)`:实现分数加法。
- `multiply(Fraction r)`:实现分数乘法。
- `print()`:以“分子/分母”形式输出分数。
- 简化功能:通过`gcd`(最大公约数)方法简化分数,例如`num = gcd(num, den); den = den / gcd(num, den);`。
示例代码(基于自定义Fraction类):
```java
import java.util.Scanner;
class Fraction {
int num, den;
public Fraction(int a, int b) {
num = a;
den = b;
simplify();
}
private void simplify() {
int gcd = gcd(Math.abs(num), Math.abs(den));
num /= gcd;
den /= gcd;
if (den < 0) { // 确保分母为正
num = -num;
den = -den;
}
}
private int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
public double toDouble() {
return (double) num / den;
}
public Fraction plus(Fraction r) {
int newNum = num * r.den + r.num * den;
int newDen = den * r.den;
return new Fraction(newNum, newDen);
}
public void print() {
System.out.println(num + "/" + den);
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Fraction a = new Fraction(sc.nextInt(), sc.nextInt());
Fraction b = new Fraction(sc.nextInt(), sc.nextInt());
Fraction c = a.plus(b);
c.print(); // 输出结果为简化后的分数
}
}
```
注意事项:
使用`double`类型时需注意精度损失,推荐使用自定义类进行财务等高精度场景计算。- 自定义类中需处理分母为负的情况,确保分数标准化。