小型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");
}
此程序适用于Float
和Integer
个数字,但问题是,对于Integer和Float值,答案都是分数,例如Number1=2
和{{ 1}}和Number2=3
目标:如果用户输入整数,则小数点不应该在那里。
是否可以获取用户在answer=5.0
上输入的值类型?
答案 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)
如果addition
为answer
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=""
属性中输入任何特定类型的值。