2016-11-14 506 views
-4

我似乎无法找到将小数值转换为分数形式的简单方法。我需要在较大程序中使用此方法,因此该方法应传递一个double值并返回一个字符串。将小数转换为分数形式方法(Java)

编辑:对不起,新的在这里。我只想要一个关于如何制作一个的想法。我见过的例子分配了自己的值来使用。该方法看起来像

public string convertype(double decimal){ 
     (Statements) 
     return fraction; 
} 
+1

据我所知,有这样的号已经取得功能。你必须自己创建它。 此外,你的问题是不够具体的SO标准。 – Mornor

回答

0
public class Fraction { 

    private int numerator, denominator; 

    public Fraction(double decimal) { 
     String stringNumber = String.valueOf(decimal); 
     int numberDigitsDecimals = stringNumber.length() - 1 - stringNumber.indexOf('.'); 
     int denominator = 1; 
     for (int i = 0; i < numberDigitsDecimals; i++) { 
      decimal *= 10; 
      denominator *= 10; 
     } 

     int numerator = (int) Math.round(decimal); 
     int greatestCommonFactor = greatestCommonFactor(numerator, denominator); 
     this.numerator = numerator/greatestCommonFactor; 
     this.denominator = denominator/greatestCommonFactor; 
    } 

    public String toString() { 
     return String.valueOf(numerator) + "/" + String.valueOf(denominator); 
    } 

    public static int greatestCommonFactor(int num, int denom) { 
     if (denom == 0) { 
      return num; 
     } 
     return greatestCommonFactor(denom, num % denom); 
    } 

    public static void main(String[] args) { 
     System.out.println(new Fraction(0.75)); 
    } 
} 
+0

试图将此作为我的方法类中的对象使用,对此有何看法? – akhg2235

+0

@ akhg2235只能像这样在你的方法中调用一个Fraction类实例。 '公共字符串转换类型(双十进制){ return(new Fraction(decimal))。toString(); }' – johnnynemonic

0
public class NewClass { 

    public static void main(String[] args) { 
     System.out.println(convertype(0.75)); 
    } 
    public static String convertype(double decimal){ 
     int digitsAfterPoint = String.valueOf(decimal).length() - String.valueOf(decimal).indexOf('.')+1; // get the count of digits after the point // for example 0.75 has two digits 
     BigInteger numerator = BigInteger.valueOf((long)(decimal*Math.pow(10, digitsAfterPoint))); // multiply 0.75 with 10^2 to get 75 
     BigInteger denominator = BigInteger.valueOf((long)(Math.pow(10, digitsAfterPoint)));  // 10^2 is your denominator 
     int gcd = numerator.gcd(denominator).intValue();           // calculate the greatest common divisor of numerator and denominator 
     if (gcd > 1){                    // gcd(75,100) = 25 
     return String.valueOf(numerator.intValue()/gcd) +"/" + String.valueOf(denominator.intValue()/gcd); // return 75/25/100/25 = 3/4 
     } 
     else{ 
     return String.valueOf(numerator) +"/" + String.valueOf(denominator);    // if gcd = 1 which means nothing to simplify just return numerator/denominator 
     }  
    } 
}