我尝试将double转换为有理数。我会检查小数点后面有多少位,然后将数字123.456保存为例如123456/1000。
public Rational(double d){
String s = String.valueOf(d);
int digitsDec = s.length() - 1 - s.indexOf('.');
for(int i = 0; i < digitsDec; i++){
d *= 10;
}
System.out.println((int)d); //checking purposes
}
然而,对于数字123.456,我得到了一个舍入误差,结果是123455。我猜测可以使用BigDecimal来解决这个问题,但我无法让它工作。此外,计算了它将成为什么有理数之后,我想使用参数(int numerator,int denominator)调用另一个构造函数,但显然不能在println所在的行中调用构造函数。我该怎么做?