我正在尝试使用parseDouble()将字符串值解析为双精度类型。解析双精度型接受我使用getText()传递给它的字符串。但这是行不通的。然后,我用双引号将其连接起来。现在正在工作。但是我在这里感到困惑。尽管它接受一个字符串,而getText()当然却得到一个字符串,但为什么它没有连接就不能工作。编写该语句后,编译器添加了“ s:”。我也想知道这是什么意思。我正在使用Android Studio 3.5.0.0
我尝试过:
val1=Double.parseDouble(ioTxt.getText());
但这不起作用。
正确的说法是:
val1 = Double.parseDouble(s: ioTxt.getText()+"");
ioTxt是一个TextView。 Val1是double类型的变量。 s:是编译器添加的内容,不是上面编写的语法和语句的一部分
如果将toString()写入而不是连接,则以上语句也可以很好地工作。是:
val1 = Double.parseDouble(ioTxt.getText().toString());
但是我不明白为什么它需要toString()才能正常工作。
我希望在不使用引号或toString()将其串联的情况下使用它。
答案 0 :(得分:2)
但是我不明白为什么它需要toString()才能正常工作。
Double.parseDouble()
takes an argument of type String
。
getText()
方法显然返回了String
以外的内容,因此您需要进行转换。
添加空字符串是强制进行String
转换的怪诞方式(带有一个+
参数的String
运算符隐含地在另一个参数上调用toString()
)。建议使用明确的toString()
通话。
's:'只是parseDouble()
使用的参数名称,由IDE显示为提示。它实际上并不是在修改您的源代码。
答案 1 :(得分:0)
android.widget.TextView.getText()
方法被声明为返回CharSequence
而不是String
。 (请参见javadoc。)
CharSequence
接口是String
声明的接口之一。 (请参见javadoc。)
Double.parseDouble
带有一个String
参数。 (请参见javadoc。)
因此,其中存在类型不匹配:
val1 = Double.parseDouble(ioTxt.getText()); // expects String
// provided CharSequence
但这可行:
val1 = Double.parseDouble(ioTxt.getText().toString());
因为toString()
正在将CharSequence
转换为String
。这是进行转换的另一种方式:
val1 = Double.parseDouble(ioTxt.getText() + "");
但是请注意,这不是有效的Java代码:
val1 = Double.parseDouble(s: ioTxt.getText()+"");
您很有可能误解了您的IDE所说的内容。
答案 2 :(得分:-1)
parseDouble接受String作为参数。
在尝试传递双精度字符而不是字符串时,您遇到错误。
对于第二个问题, 编译器永远不会在源文件中添加任何内容。您看到的“ s:”是您正在使用的IDE的一种方式,用于在调用方法时显示您正在设置的参数。