0

好的,我已经为此搜索了高低,然后回来挠头......我习惯了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

4

3 回答 3

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

此外,将您的 double 值转换为 int 以便能够将它们分配给 float 是没有任何意义的。

于 2013-08-29T20:07:09.173 回答
0

最终结果可能只是由于您可能无意中进行的所有类型转换导致的精度损失造成的。

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

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

如果您需要舍入使用 Math.round() 而不是将浮点数转换为整数。

你的代码,取决于你打算做什么,应该看起来更像:

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)));
于 2013-08-29T20:45:06.213 回答
0

有几处不对。首先,您正在使用Integer.parseInt()但您正在尝试解析浮点数。您应该使用Float.parseFloat()Double.parseDouble()

还,

float vals1 = (int) 3.89;

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

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

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

正在对 int 进行一系列数学运算,这将返回 an int,但随后您将其强制转换为float. 所以它将是一个float,但有一个int价值。

于 2013-08-29T20:03:41.113 回答