在Android中添加float和integer类型的两个值的方法

时间:2013-12-11 06:55:24

标签: android casting integer android-edittext floating

小型Android应用,执行addition和其他基本操作,OnClick()如下

@Override
public void onClick(View v) {
    switch (v.getId()) {
           case R.id.btnAdd: 
           isValidToProcess(1);
           break;
           ......
           /*Switch continues for all other operations like Subtraction,etc*/
    }
}

我的isValidToProcess()如下

private boolean isValidToProcess(int a) {
    String num1 = mEdit1.getText().toString();
    String num2 = mEdit2.getText().toString();

    if (num1.matches("") || num2.matches("")) 
    {
        ValueEmptyWarning();
    }
    else {
        float numa = Float.parseFloat(num1);
        float numb = Float.parseFloat(num2);
        switch (a) {

        case 1:
            addition(numa, numb);
            break;
              ......
           /*Switch continues for all other operations like Subtraction,etc*/
    }
}

我的addition()功能

public void addition(float numa, float numb) {
    answer = numa + numb;
    mEdit3.setText(String.valueOf(answer));
    Log.v(TAG, "Error at Subtraction");
}

此程序适用于FloatInteger个数字,但问题是,对于Integer和Float值,答案都是分数,例如Number1=2和{{ 1}}和Number2=3

目标:如果用户输入整数,则小数点不应该在那里。

是否可以获取用户在answer=5.0上输入的值类型?

7 个答案:

答案 0 :(得分:2)

首先检查Integer.parseInt(numer)并捕获NumberFormatException。如果它会正确解析它,那么它是一个整数,你可以去浮动。

答案 1 :(得分:1)

我不认为EditText中有一个可用的api供开发人员获取值的类型。你可以在JAVA中找到另一种方法,apache可以提供一些小部件来处理这个。

答案 2 :(得分:1)

要获得更多控制权,请尝试重载方法的基本OOP概念,例如

public float addition(float numa, float numb) {
    // will return float
    return numa + numb;
}

public int addition(int numa, float numb) {
    // explicitly cast to int
    return numa + (int) numb;
}

public int addition(float numa, int numb) {
    // explicitly cast to int
    return (int) numa + numb;
}

public int addition(int numa, int numb) {
    // will return int
    return numa + numb;
}

要检查你的输入,尝试这样的事情......

public void examineInput(String input1, String input2) {

    // For both are float
    if (input1.indexOf(".") != -1 && input2.indexOf(".") != -1) {
        float numa = Float.parseFloat(input1);
        float numb = Float.parseFloat(input2);
        float ans = addition(numa, numb);
        Log.i(TAG, String.format("%f + %f = %f", numa, numb, ans));
    }

    // for first to be int and second to be float
    else if (input1.indexOf(".") == -1 && input2.indexOf(".") != -1) {
        int numa = Integer.parseInt(input1);
        float numb = Float.parseFloat(input2);
        int ans = addition(numa, numb);
        Log.i(TAG, String.format("%d + %f = %d", numa, numb, ans));
    }

    // for first to be float and second to be int
    else if (input1.indexOf(".") != -1 && input2.indexOf(".") == -1) {
        float numa = Float.parseFloat(input1);
        int numb = Integer.parseInt(input2);
        int ans = addition(numa, numb);
        Log.i(TAG, String.format("%f + %d = %d", numa, numb, ans));
    }

    // for both to be int
    else if (input1.indexOf(".") == -1 && input2.indexOf(".") == -1) {
        int numa = Integer.parseInt(input1);
        int numb = Integer.parseInt(input2);
        int ans = addition(numa, numb);
        Log.i(TAG, String.format("%d + %d = %d", numa, numb, ans));
    }
}

这是测试此代码的输入,带输出

examineInput("5.2", "6.2");    // 5.200000 + 6.200000 = 11.400000
examineInput("5", "3.6");      // 5 + 3.600000 = 8
examineInput("1.6", "5");      // 1.600000 + 5 = 6
examineInput("5", "5");        // 5 + 5 = 10

注意:您需要验证examineInput始终获取有效数字,而不是非numaric字符串...

希望这有助于改善OOP概念......:)

答案 3 :(得分:1)

在这种情况下,您可以使用String格式化程序。

Formatting Numeric Print Output

对于您的情况,您必须使用这样的模式。

DecimalFormat df = new DecimalFormat("0.##");
String finalAnswer = df.format(answer);

答案 4 :(得分:1)

如果additionanswer

,您可以在float功能中使用以下代码
answer = numa + numb;
String answerString = String.valueOf(answer);
String decimalString = answerString.substring(answerString.indexOf(".") + 1);

if (Integer.parseInt(decimalString) == 0)
    answerString = answerString.substring(0, answerString.indexOf("."));

如果float在小数点后的值不是0,则会返回answer值,否则会在int

中返回String

答案 5 :(得分:0)

用户总是输入String没有使用editText输入的其他类型但是,你需要检查editText是否有(。)因此它是浮点数,然后将其解析为浮点数,否则,它是Integer然后将其解析为Integer

代码可能如下所示。

if (num1.indexOf(".") != 0) {
    float numa = Float.parseFloat(num1);
    float numb = Float.parseFloat(num2);
}
else
{
    int numa = Integer.parseInt(num1);
    int numb = Integer.parseInt(num2);
}

通过这样做,整数的输出不会是分数样式

<强> P.S: 您必须确保键盘只输入数字。所以你的应用程序在解析时不会崩溃。

希望这会有所帮助

答案 6 :(得分:0)

用户在EditText上输入的值类型将始终为String。但您可以限制用户在EditText内的android:inputType=""属性中输入任何特定类型的值。