textdisplay.setText(total.toString());
当我试图撤销String时。它给了我一个错误,如“无法在原始类型double上调用tostring()”。我读了类似的线程并尝试了一切但没有任何作用。奇怪的是,这个相同的代码适用于我的朋友。 请帮忙。
public void showsign(String sign){
if(last_button==R.id.plus || last_button==R.id.minus || last_button==R.id.multiply
|| last_button==R.id.divide){
}
else{
clear_flag = 1;
Double newNumber = Double.parseDouble(textdisplay.getText().toString());
if(sign_flag == "" || sign_flag == "="){
total = newNumber;
textdisplay.setText(total.toString());
}
else if(sign_flag == "+"){
total = total+newNumber;
textdisplay.setText(total.toString());
}
else if(sign_flag == "-"){
total = total-newNumber;
textdisplay.setText(total.tostring());
}
else if(sign_flag == "*"){
total = total*newNumber;
textdisplay.setText(total.tostring());
}
else if(sign_flag == "/"){
total = total/newNumber;
textdisplay.setText(total.tostring());
}
}
}
答案 0 :(得分:4)
原始类型不是Object
,因此没有.toString()
。
你必须使用(例如)String.valueOf()
,即:
textdisplay.setText(String.valueOf(total));
更重要的是,这个:
if(sign_flag == "/")
和类似的东西不起作用。请改为使用"/".equals(sign_flag)
(如果sign_flag.equals("/")
保证不是sign_flag
,则使用null
。
答案 1 :(得分:2)
您可以使用String.valueOf(double)
,但..
查看DecimalFormat:http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html
与String.valueOf不同,您可以控制要查看的小数位数。
答案 2 :(得分:0)
原始类型不是Object
,因此它没有toString
方法。
我看不到total
的声明,但我很确定它是原始的。尝试使用它的包装器。例如,如果您看到类似double total =
的内容......
将其更改为Double total =
...
另一个问题是,如果你使用==
,则意味着“比较参考”。如果您想比较Object
s(如String
),请使用equals
方法。
答案 3 :(得分:0)
Double
是double
基元类型的包装类。
如果您不想“Auto-box”加倍对象,那么您可以随时使用:String.valueOf(double)
答案 4 :(得分:0)
如果你想使用.toString(),那么有问题的变量必须是一个Object。基元不是对象。要完成你想要的和你的朋友可能做的事情。您需要使用包装类。
包装类: 双
原始: 双
答案 5 :(得分:0)
而不是textdisplay.setText(total.toString());
使用textdisplay.setText("" + total);
正如其他人已经指出的那样toString()
方法在Object
类中定义,默认情况下由class
es继承,因此toString()
方法可用于任何您在库中定义或可用的类。但是,double
,int
,float
,byte
等原语不是类,因此这些类型的变量不能调用toString()
方法。
答案 6 :(得分:0)
你不能直接转换这个双倍你应该使用这个......
double doublevalue = 0;
String value = String.valueOf(doublevalue);