如何在文本中输入十进制数

Posted

技术标签:

【中文标题】如何在文本中输入十进制数【英文标题】:How to input a decimal number in a textEdit 【发布时间】:2022-01-24 02:54:49 【问题描述】:

我有一个输入类型为 numberDecimal 的 TextEdit,我用输入的数字执行了一些代码

当我输入一个整数时,它可以正常工作,但是当我输入一个带小数点的数字时,应用程序会完全重新启动

那么我如何使它与十进制数一起工作?

如果您最终帮助我,请提前感谢您

KT 文件

    class f_to_c : AppCompatActivity() 
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.f_to_c)

        val actionBar = supportActionBar

        val calculate = findViewById<Button>(R.id.calculate)
        val tempEntered = findViewById<TextView>(R.id.tempEntered)
        val result = findViewById<TextView>(R.id.result)
        val temp = findViewById<EditText>(R.id.temp)


        if (actionBar != null)
            actionBar.title = "Fahrenheit To Celsius"
            actionBar.setDisplayHomeAsUpEnabled(true)
        

        calculate.setOnClickListener 
            var x = Integer.parseInt(temp.getText().toString()).toString().toInt()
            tempEntered.text = x.toDouble().toString()
            result.text = ((x-32).toFloat()*5/9).toString()
        

    

【问题讨论】:

【参考方案1】:

如果你想处理十进制数字,你不应该使用Integer.parseInt。这将在“1.23”之类的内容上引发错误。以下应该可以工作(或者你可以使用Double.parseDouble

val x = temp.getText().toString().toDoubleOrNull() ?: 0.0
tempEntered.text = x.toString()
result.text = ((x-32.0)*5.0/9.0).toString()

如果用户输入“1..3”等无效数字,您可能希望以不同的方式处理 null 情况,但在这种情况下默认为 0,而不是抛出。

此外,如果要在国际范围内使用,您应该考虑到某些语言环境使用逗号作为小数分隔符(“1,23”) - 这将在此处中断。您可以为此使用locale-aware number parser,或者在转换之前将逗号替换为句点。

val xs = temp.getText().toString().replace(",",".")
val x = xs.toDoubleOrNull() ?: 0.0

【讨论】:

以上是关于如何在文本中输入十进制数的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将用户输入限制为有效的十进制数

如何在 EditText 中输入“负十进制数”?

无法解析在 Windows Phone 上使用非英文键盘输入的十进制数

JAVA如何将二进制数转换成文件?

C语言如何定义一个16进制数

在 Power Query 中将负文本转换为十进制数