【问题标题】:How to get double from EditText the right way?如何以正确的方式从 EditText 获得双倍?
【发布时间】:2014-05-08 10:54:45
【问题描述】:

有谁知道如何从 EditText 解析双精度?

我知道该怎么做,但我认为这不是正确的方式。有没有人有最好的做法?

谢谢。

【问题讨论】:

标签: java android parsing android-edittext double


【解决方案1】:

你可以试试这个:

double value;
String text =your_edittext.getText().toString();
if(!text.isEmpty())
try
{
   value= Double.parseDouble(text);
   // it means it is double
} catch (Exception e1) {
   // this means it is not double 
   e1.printStackTrace();
}

【讨论】:

  • 如何检查Edittext是否为double并检查edittext是否为空?
  • 看起来不错,是用于解析 double 的 try and catch 吗?
  • Double.parseDouble(text); 用于解析,但如果给出错误,则表示它不是双倍
  • 好吧,我知道你在那里做了什么,所以你可以在异常中举杯祝酒,说它不是双重的。您可以设置双精度值 == 0.0。
【解决方案2】:

无论您在 EditText 中键入什么都是字符串。

如何检查edittext是否为空?

String str = edit_text.getText().toString();
if (str.trim().equals("")
Toast.makeText(getApplicationContext(),
                    "EditText is empty.",
                    Toast.LENGTH_SHORT).show();

【讨论】:

    【解决方案3】:

    从 EditText (Kotlin) 解析双精度

    • toDouble() 函数效果很好,但如果字符串不是数字的有效表示。抛出 NumberFormatException 异常。

    • toDoubleOrNull() 函数返回一个双精度值。如果字符串不是数字的有效表示,则返回 null

    实施

    fun parseToDouble(value :Editable): Double { 
        if(value.isNotEmpty()){
            val result = value.trim().toString().toDoubleOrNull()
            if(result != null) 
                return result
            else 
                return 0.0
        }else { 
          return 0.0
       }
    }
    

    以上代码可以使用Extension functions进行简化

    fun Editable.parseToDouble(): Double { 
        if(this.isNotEmpty()){
            val result = this.trim().toString().toDoubleOrNull()
            if(result != null) 
                return result
            else 
                return 0.0
        }else { 
          return 0.0
       }
    }
    
    • 扩展函数中的“this”关键字对应于接收器对象。也可以去掉

    以上代码可以使用 Kotlin 进行简化When expression

    fun Editable.parseToDouble(): Double { 
        return when(isNotEmpty()){
        true -> {
            val result = trim().toString().toDoubleOrNull()
            if(result != null) result else 0.0
          }
       else -> 0.0
    }
    

    以上代码可以通过Convert to expression body (“return” vs expression body)进行简化

    fun Editable.parseToDouble(): Double = when(isNotEmpty()){
        true -> {
            val result = trim().toString().toDoubleOrNull()
            if(result != null) result else 0.0
          }
       else -> 0.0
    }
    

    以上代码可以使用 Kotlin 进行简化Elvis Operator

    fun Editable.parseToDouble() = when(isNotEmpty()){
        true -> trim().toString().toDoubleOrNull()?: 0.0
        else -> 0.0
    }
    

    最简单的版本(最佳)

    fun Editable.parseToDouble() = trim().toString().toDoubleOrNull()?: 0.0
    

    或者

    fun Editable.parseToDouble() = toString().toDoubleOrNull()?: 0.0
    

    注意事项:同样可以创建parseToIntparseToLong函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2013-03-30
      • 2021-02-25
      • 2022-01-20
      • 2019-12-19
      • 2020-02-10
      相关资源
      最近更新 更多