Java 为android计算器创建点函数
我正在做一个小项目,从网上收集一些随机计算器代码,并改进它们以学习java和android开发 所以,我目前正在尝试为这个计算器代码实现一个点函数,但它并没有像预期的那样工作。它不添加点,而是添加值46(为什么是46??)。你能帮我创建一个功能点函数吗 Java代码:Java 为android计算器创建点函数,java,android,xml,calculator,Java,Android,Xml,Calculator,我正在做一个小项目,从网上收集一些随机计算器代码,并改进它们以学习java和android开发 所以,我目前正在尝试为这个计算器代码实现一个点函数,但它并没有像预期的那样工作。它不添加点,而是添加值46(为什么是46??)。你能帮我创建一个功能点函数吗 Java代码: package com.example.Elof_Calculator; import android.os.Bundle; import android.app.Activity; import android
package com.example.Elof_Calculator;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
public String str ="";
Character op = 'q';
double i,num,numtemp;
EditText showResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showResult = (EditText)findViewById(R.id.result_id);
}
public void btn1Clicked(View v){
insert(1);
}
public void btn2Clicked(View v){
insert(2);
}
public void btn3Clicked(View v){
insert(3);
}
public void btn4Clicked(View v){
insert(4);
}
public void btn5Clicked(View v){
insert(5);
}
public void btn6Clicked(View v){
insert(6);
}
public void btn7Clicked(View v){
insert(7);
}
public void btn8Clicked(View v){
insert(8);
}
public void btn9Clicked(View v){
insert(9);
}
public void btn0Clicked(View v){
insert(0);
}
public void btndotClicked(View v){
insert('.');
//error
}
public void btnplusClicked(View v){
perform();
op = '+';
}
public void btnminusClicked(View v){
perform();
op = '-';
}
public void btndivideClicked(View v){
perform();
op = '/';
}
public void btnmultiClicked(View v){
perform();
op = '*';
}
public void btnequalClicked(View v){
calculate();
}
public void btnclearClicked(View v){
reset();
}
private void reset() {
// TODO Auto-generated method stub
str ="";
op ='q';
num = 0;
numtemp = 0;
showResult.setText("");
}
private void insert(int j) {
// TODO Auto-generated method stub
str = str+Integer.toString(j);
num = Integer.valueOf(str).intValue();
showResult.setText(str);
}
private void perform() {
// TODO Auto-generated method stub
str = "";
numtemp = num;
}
private void calculate() {
// TODO Auto-generated method stub
if(op == '+')
num = numtemp+num;
else if(op == '-')
num = numtemp-num;
else if(op == '/')
num = numtemp/num;
else if(op == '*')
num = numtemp*num;
showResult.setText(""+num);
}
}
点按钮的XML代码:
<Button
android:id="@+id/Btndot_id"
style="?android:attr/buttonStyleSmall"
android:layout_width="70dp"
android:layout_height="64dp"
android:background="@drawable/buttonstyle1"
android:gravity="center_vertical|center_horizontal"
android:text="."
android:textColor="@android:color/white"
android:textSize="22sp"
android:onClick="btndotClicked"
/>
那么,dot函数的代码应该是什么呢?
感谢所有帮助:)问题是您的插入函数具有签名
void insert(int j)
在Java中,如果在需要int
类型时使用char
基元类型,则会发生隐式加宽转换。例如,这是有效的Java:
int dot = '.';
但是,int
变量dot
的值现在将是46,它恰好是与用于表示'的位模式相对应的整数。
您可以做的是将insert
函数更改为接受String
参数,并为int
参数添加重载。您还需要更改num
的逻辑,因为您现在可以使用浮点数
private void insert(int value) {
insert(Integer.toString(value));
...
num = Double.parseDouble(str);
}
private void insert(String value) {
...
}
...
public void btndotClicked(View v){
insert("."); // inserting a String instead of a char
}
提示:46是字符“.”的ascii值:)@matiash ohh我看到了哈哈:)我试过使用insert(.)、insert(“.”)、str+=“.”和其他一些方法,但都没有成功:(非常感谢,伙计,它现在工作得更好了!:D然而,当我尝试例如6.6*6时,结果变成39599994,而不是39.6为什么?:/对于一些值,它不这样做(例如2.4*2=4.8)@这是因为一些浮点值只能用64位的双精度近似表示。这是一个不幸的现象,也是造成很多混乱的原因。看看这篇文章吧
private void insert(int value) {
insert(Integer.toString(value));
...
num = Double.parseDouble(str);
}
private void insert(String value) {
...
}
...
public void btndotClicked(View v){
insert("."); // inserting a String instead of a char
}