[英]Tornadofx filterInput
我想为文本字段制作一种特殊格式以转换为双精度。 但是,我想使用逗号而不是句点来分隔小数点。 我已经研究了几天并查看了指南,但我仍然遇到问题。 isDouble
在使用逗号时似乎不起作用。 即使我使用了句点,在回写时数据的格式也是错误的(即文本字段 12.13 在数据库中变为 1213.00)。 这是我到目前为止所拥有的:
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
}
}}
这行得通吗? 我知道循环使用老式方法和使用变量(总)并不是处理事情的最酷方法,但计算量相对较小且易于理解。
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.