मैं एक समारोह है कि जावा में एक सरल अंश के लिए एक double
धर्मान्तरित बना दिया है:जांच करें कि एक डबल = 1/3
public static int gcm(int a, int b) {
return b == 0 ? a : gcm(b, a % b);
}
public static String toFraction(double d) {
int decimals = String.valueOf(d).split("\\.")[1].length();
int mult = (int) Math.pow(10, decimals);
int numerator = (int) (d * mult);
int denominator = mult;
// now simplify
int gcm = gcm(numerator, denominator);
numerator /= gcm;
denominator /= gcm;
return numerator + "/" + denominator;
}
यह काम करता है, इस तथ्य के अलावा कि अगर मैं toFraction(1.0/3)
उपयोग करते हैं, इस वसीयत, समझ में, "715827882/2147483647"
लौटें। "1/3"
वापस करने के लिए मैं इसे कैसे ठीक कर सकता हूं?
@MickMnemonic BigDecimal कैसे प्रतिनिधित्व त्रुटि के बिना 1/3 का प्रतिनिधित्व करेगा? –
मुझे नहीं पता कि यह दृष्टिकोण कैसे काम करेगा। एक डबल दशमलव नहीं है, और न ही यह मदद करेगा अगर यह था। क्या आप अन्य समाधानों के लिए खुले हैं? –
सहमत हुए। ओपी को BigDecimal या कुछ समान का उपयोग करना चाहिए। – pczeus