[英]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.