Dil*_*Dil 8 java decimal fractions
我需要将十进制转换为分数.它很容易转换为10英尺.
1.5 => 15/10
Run Code Online (Sandbox Code Playgroud)
这可以通过以下代码完成:
public class Rational {
private int num, denom;
public Rational(double d) {
String s = String.valueOf(d);
int digitsDec = s.length() - 1 - s.indexOf('.');
int denom = 1;
for (int i = 0; i < digitsDec; i++) {
d *= 10;
denom *= 10;
}
int num = (int) Math.round(d);
this.num = num;
this.denom = denom;
}
public Rational(int num, int denom) {
this.num = num;
this.denom = denom;
}
public String toString() {
return String.valueOf(num) + "/" + String.valueOf(denom);
}
public static void main(String[] args) {
System.out.println(new Rational(1.5));
}
}
Run Code Online (Sandbox Code Playgroud)
但我想要的是
1.5 => 3/2
Run Code Online (Sandbox Code Playgroud)
我不知道如何继续 我的问题不是重复.因为其他相关问题是C#.这是java.
Hri*_*o93 10
你应该找到结果数的最大公约数,并用它除以分子和分母.
这是一种方法:
public class Rational {
private int num, denom;
public Rational(double d) {
String s = String.valueOf(d);
int digitsDec = s.length() - 1 - s.indexOf('.');
int denom = 1;
for (int i = 0; i < digitsDec; i++) {
d *= 10;
denom *= 10;
}
int num = (int) Math.round(d);
int g = gcd(num, denom);
this.num = num / g;
this.denom = denom /g;
}
public Rational(int num, int denom) {
this.num = num;
this.denom = denom;
}
public String toString() {
return String.valueOf(num) + "/" + String.valueOf(denom);
}
public static int gcd(int num, int denom) {
....
}
public static void main(String[] args) {
System.out.println(new Rational(1.5));
}
}
Run Code Online (Sandbox Code Playgroud)
static private String convertDecimalToFraction(double x){
if (x < 0){
return "-" + convertDecimalToFraction(-x);
}
double tolerance = 1.0E-6;
double h1=1; double h2=0;
double k1=0; double k2=1;
double b = x;
do {
double a = Math.floor(b);
double aux = h1; h1 = a*h1+h2; h2 = aux;
aux = k1; k1 = a*k1+k2; k2 = aux;
b = 1/(b-a);
} while (Math.abs(x-h1/k1) > x*tolerance);
return h1+"/"+k1;
}
Run Code Online (Sandbox Code Playgroud)
我从这里得到了这个答案.我所要做的就是将他的答案转换为java.
| 归档时间: |
|
| 查看次数: |
21714 次 |
| 最近记录: |