Ho fatto una funzione che converte un double
a una frazione semplificata in Java:Verificare se un doppio = 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;
}
Funziona, tranne per il fatto che se uso toFraction(1.0/3)
, questa volontà, comprensibilmente, restituire "715827882/2147483647"
. Come posso risolvere questo problema per restituire "1/3"
?
@MickMnemonic In che modo BigDecimal rappresenta 1/3 senza errore di rappresentazione? –
Non vedo come funzionerà questo approccio. un doppio non è un decimale, né sarebbe di aiuto se lo fosse. Sei aperto ad altre soluzioni? –
concordato. L'OP dovrebbe usare BigDecimal o qualcosa di simile. – pczeus