在java中执行除法的正确方法

时间:2013-08-29 20:01:02

标签: java android integer

好的,我已经为此搜索了高低,然后回过头来......我已经习惯了php和java新手,所以请耐心等待我......

我正在构建一个应用程序,它会执行一些我将每天使用的基本数学(个人应用程序,而不是营销它)。该应用程序安装正常并运行,但当我点击计算按钮时我得到0作为答案。我做错了什么?

float val1 = Integer.parseInt(fat.getText().toString()) *1;
float vals1 = (int) 3.89;
float val2 = Integer.parseInt(carbs.getText().toString()) *1;
float vals2 = (int) 9.17;
float val3 = Integer.parseInt(fiber.getText().toString()) *1;  
float vals3 = (int) 12.49;
float val4= Integer.parseInt(protein.getText().toString()) *1; 
float vals4 = (int) 10.94;
float answer = (float) (((val4 / vals4) + (val2 / vals2) + (val1 / vals1)) - (val3 / vals3));  
Integer answerf = (int) answer;
points.setText(answerf.toString()); 

编辑: 按要求提供预期值(用于测试运行)

val1 = 7
val2 = 26
val3 = 2
val4 = 5

预期结果为5

3 个答案:

答案 0 :(得分:1)

检查 EditTexts 是否包含有效数字,并执行以下操作: 在这个例子中,我假设EditText包含值“10”。

    float val1 = Integer.parseInt("10") *1;
    float vals1 =  3.89f;
    float val2 = Integer.parseInt("10") *1;
    float vals2 = 9.17f;
    float val3 = Integer.parseInt("10") *1;  
    float vals3 =  12.49f;
    float val4= Integer.parseInt("10") *1; 
    float vals4 =  10.94f;
    float answer = (float) (((val4 / vals4) + (val2 / vals2) + (val1 / vals1)) - (val3 / vals3));  

    System.out.println("Result: " + answer);

此处的结果是:3.7746425

  

此外,将双值转换为没有任何意义   int可以将它们分配给float。

答案 1 :(得分:0)

有些不对劲。首先,你正在使用Integer.parseInt()但是你可以尝试解析一个浮点数。您应该使用Float.parseFloat()Double.parseDouble()

另外,

float vals1 = (int) 3.89;

没有意义。您通过将双字节转换为int来删除小数部分,但仍将其存储在浮点数中。移除演员,并将3.89更改为3.89F,表示它是一个浮动。

因为截至目前,最后这一行:

float answer = (float) (((val4 / vals4) + (val2 / vals2) + (val1 / vals1)) - (val3 / vals3));

对int进行一系列数学运算,返回int,然后将其转换为float。因此它将是float,但具有int值。

答案 2 :(得分:0)

最终结果可能仅仅是由于您可能无意中所做的所有类型铸件导致的精度损失。

当你将double或float值转换为int然后返回float时,会失去很多精度。您应该保持变量类型一致,直到您真正想要或需要将计算值从一种类型转换为另一种类型的最后一步。

您也不需要乘以1(* 1),因为它对整数乘法的结果没有任何作用。

如果你需要使用Math.round()而不是将float转换为整数。

根据您打算做的事情,您的代码应该更像:

float val1 = Float.parseFloat(fat.getText().toString());
float vals1 = 3.89f;
float val2 = Float.parseFloat(carbs.getText().toString());
float vals2 = 9.17f;
float val3 = Float.parseFloat(fiber.getText().toString()); 
float vals3 = 12.49f;
float val4= Float.parseFloat(protein.getText().toString());
float vals4 = 10.94f;
float answer = (((val4 / vals4) + (val2 / vals2) + (val1 / vals1)) - (val3 / vals3));
points.setText(String.valueOf(Math.round(answer)));