Java中的双重操作错误答案

时间:2015-02-28 01:31:39

标签: java

我有一个双,说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。由于我的目标是打印出变量,所以我可能还需要其他方法吗?

0 个答案:

没有答案