我有一个双,说r = 1.44,r - 1.0应该是0.44,但我得到0.439999995,我认为有一个溢出,但我不知道我做错了。 我尝试使用r - 1.0,r - 1或(double)(r - 1.0),没有任何作用。
感谢。
可能我应该更清楚。我试图在破解代码访谈时解决这个问题:
给定以字符串形式传递的(十进制 - 例如3.72)数字, 打印二进制表示。如果数字无法表示 准确地以二进制形式打印“ERROR”
以下是基于本书提供的解决方案的代码:
public class DecimalToBinary {
public static String binary (String decimal){
if (decimal == null || decimal.length() == 0)
return decimal;
boolean hasPoint = false;
int pointP = 0;
if (decimal.contains(".")) {
hasPoint = true;
pointP = decimal.indexOf('.');
}
StringBuilder intString = new StringBuilder();
int intPart = Integer.parseInt(hasPoint ? decimal.substring(0, pointP) : decimal);
while (intPart > 0){
intString.append(intPart % 2);
intPart >>= 1;
}
if (!hasPoint)
return intString.toString();
StringBuilder decString = new StringBuilder();
double decPart = Double.parseDouble(decimal.substring(pointP));
if (decPart == 0)
return intString.toString();
while (decPart > 0){
if (decPart == 1) {
decString.append(1);
break;
}
double r = decPart * 2.0;
System.out.println("r " + r);
if (r >= 1) {
decString.append(1);
decPart = (double)(r - 1);
System.out.println("dec " + decPart);
}
else {
decString.append(0);
decPart = r;
}
}
return intString.toString() + "." + decString.toString();
}
public static void main(String[] args) {
System.out.println(binary("3.72"));
}
}
然后我意识到它没有给我正确答案,我发现它是因为r。由于我的目标是打印出变量,所以我可能还需要其他方法吗?