首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tornadofx filterInput

Tornadofx filterInput
EN

Stack Overflow用户
提问于 2020-08-04 01:00:22
回答 1查看 64关注 0票数 0

我想为文本字段设置一种特殊的格式,以便转换为双精度。但是,我希望使用逗号来分隔小数,而不是句点。我已经研究了几天了,看了指南,但我仍然有问题。使用逗号时,isDouble似乎不起作用。即使我使用句点,在写回数据时,数据的格式也是错误的(例如,文本字段12.13在数据库中变为1213.00 )。这就是我到目前为止所知道的:

代码语言:javascript
复制
val format = DecimalFormat("##0.00", DecimalFormatSymbols(Locale.GERMAN))

                        textfield(model.size, converter = object : StringConverter<Number>() {
                            override fun toString(number: Number?) = format.format(number)
                            override fun fromString(string: String?) = try {
                            format.parse(string).toDouble() } 
                            catch (e: ParseException) {0.0}
                        }){
                        filterInput {
                            val ba = mutableListOf<Boolean>().asObservable()
                            it.controlNewText.toCharArray().forEach { char ->
                                when {
                                    char.isDigit() -> ba.add(true)
                                    char == ',' -> ba.add(true)
                                    else -> ba.add(false)
                                }
                            }
                            when{
                                ba.any{false} -> return@filterInput false
                                else ->  return@filterInput true
                            } 
                        }}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-04 06:39:36

这样行得通吗?我知道用老式的方法循环和使用变量(Gross!)不是最酷的处理方式,但计算量相对较小且易于理解。

代码语言:javascript
复制
filterInput {
                var decimalUsed = false
                loop@ for (char in it.controlNewText) {
                    if (char == ',') {
                        if (decimalUsed) {
                            return@filterInput false
                        } else {
                            decimalUsed = true
                        }
                    } else if (!char.isDigit()) {
                        return@filterInput false
                    }
                }
                true
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63233795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档