代码之家  ›  专栏  ›  技术社区  ›  Arfmann

kotlin/java-有类似tryparse()的东西吗?

  •  0
  • Arfmann  · 技术社区  · 6 年前

    我需要将3个edittext转换为double并进行自动计算。问题是:在java中,使用 Double.parseDouble() 如果edittext字符串为空,则引发异常,因此我必须使用try catch。在科特林,使用 toDoubleOrNull 我必须用“if”来检查是否为空。

    现在,有两个编辑文本我必须做 val a = firstDobule + secondDouble 然后 val b = a + 2 但是使用上述方法,我无法分离计算:它需要同时转换所有3个EditText,我希望同时转换单个EditText。

    为了让你更好地理解,这是C:

     Double.TryParse(firstEditText.Text, out Double firstDouble);
     Double.TryParse(secondEditText.Text, out Double secondDOuble);
    
    Double a = firstDouble + secondDOuble;
    Double b = a + 2;
    

    在c_中,使用tryparse不会抛出任何异常,也不需要手动检查是否为空。 我想这么做,但用Kotlin或Java

    2 回复  |  直到 6 年前
        1
  •  1
  •   zsmb13    6 年前

    您可以为 EditText 它将以双精度形式返回文本值。

    fun EditText.doubleValue() = text.toString().toDoubleOrNull() ?: 0.0
    

    这假设您希望在出现不可分析的输入时获得0。然后您可以轻松读取值:

    val a = firstEditText.doubleValue() + secondEditText.doubleValue()
    val b = a + 2
    
        2
  •  1
  •   zsmb13    6 年前

    我认为@pawel在正确的轨道上,但是,我可以定义 extension property 而不是扩展函数,因为它在语义上似乎更合适:

    val EditText.doubleValue: Double
        get() = text.toString().toDoubleOrNull() ?: 0.0
    

    用法如下:

    val a = firstEditText.doubleValue + secondEditText.doubleValue
    val b = a + 2