正如评论中指出的那样,如果您只有一个String表示形式,那么就无法判断它实际上是否有重复的部分,或者精度是否不够高.
===更新===
我正在研究一个用分子和分母表示为BigIntegers的有理数的类(并假定尽可能地简化).在那里,我实现了一种以十进制字符串形式表示的方法,并提出了以下方法:
public String toDecimalString() {
var result = new StringBuilder();
var remainders = new HashMap();
if(!isNonNegative()) result.append("-");
var divAndRem = numerator.abs().divideAndRemainder(denominator);
result.append(divAndRem[0].toString());
if(isWholeNumber()) return result.toString();
result.append(".");
int currentPosition = result.length();
remainders.put(divAndRem[1], currentPosition);
while(!divAndRem[1].equals(BigInteger.ZERO)) {
divAndRem = divAndRem[1].multiply(BigInteger.TEN).divideAndRemainder(denominator);
result.append(divAndRem[0].toString());
if(remainders.containsKey(divAndRem[1])) {
int periodStart = remainders.get(divAndRem[1]);
return result.substring(0, periodStart)+"["+result.substring(periodStart)+"]";
}
remainders.put(divAndRem[1], ++currentPosition);
}
return result.toString();
}