android用户提供的输入不正确的减法

时间:2012-04-11 13:45:32

标签: android double user-input

让我们从数学的升级开始。

目标体重= 8.4 当前重量= 9.1 当前体重 - 目标体重= 0.7(你会这么认为)

if( obj != null && obj.targetWeight != null && obj.currentWeight != null) {
            try {
                double i = Double.parseDouble( obj.targetWeight );
                double o = Double.parseDouble( obj.currentWeight);
                //do something if target weight is a number
                if(i>o){
                    outputEditText.setText ("Congratulations. you have passed your target weight");
                }
                else if (i<o){
                    outputEditText.setText(
                            "Your Target Weight is " + obj.targetWeight +obj.unit + "\n" + 
                                    "Your Current Weight is " + obj.currentWeight + "\n" +
                                    "Difference is " + (o - i));
                }

根据上述8.4-9.1 = 0.6999999999999993

目标和当前权重都是用户提供的输入,解析为double。

有谁知道我做错了什么

非常感谢

3 个答案:

答案 0 :(得分:4)

你没有做错任何事。欢迎来到浮点运算的精彩世界!很多看起来不错的数字甚至对我们来说都无法在计算机使用的二进制数字系统中准确表示。

您眼前的问题的答案是格式化。你永远不能简单地打印原始的双精度数字; 总是必须使用例如DecimalFormat来提供适当数量的小数位。您的数字(舍入到(例如)小数点后五位)将打印为0.7。

答案 1 :(得分:1)

并非所有小数(即双打)都可以在基数2中完美表达。因此,您经常得到一个圆整,导致您刚看到的内容。 .6999999 ...的输出是计算机使用输入的近似基数2表示的减法的最佳近似值。

答案 2 :(得分:0)

感谢大家的回答。

事实证明,机器的世界与我的大脑可能的想法不同。

这就是我为解决问题所做的工作。

DecimalFormat df = new DecimalFormat("####.##"); 

                    String b = df.format(o-i);