我想为文本字段设置一种特殊的格式,以便转换为双精度。但是,我希望使用逗号来分隔小数,而不是句点。我已经研究了几天了,看了指南,但我仍然有问题。使用逗号时,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
}
}}发布于 2020-08-04 06:39:36
这样行得通吗?我知道用老式的方法循环和使用变量(Gross!)不是最酷的处理方式,但计算量相对较小且易于理解。
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
}https://stackoverflow.com/questions/63233795
复制相似问题