2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
對(duì)我來說最簡(jiǎn)單的方法似乎是找到最后的外觀或并刪除之前的所有外觀,那么您應(yīng)該能夠使用,
.
.
.
Double::parseString

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先,我需要說的是,沒有明確格式的通用提議函數(shù)的方法沒有意義,因?yàn)橄馌gidds和@DodgyCodeException注釋一樣,它容易受到歧義的影響。
因此,我使用按逗號(hào)分組的小數(shù)點(diǎn)分隔符和倒置情況(按點(diǎn)分組的逗號(hào)分隔符)來解決。然后清理逗號(hào)并替換點(diǎn),以便獲得我要解析為的無分組點(diǎn)十進(jìn)制格式regex[0-9]+(,[0-9]{3})*\\.[0-9]{2}[0-9]+(\\.[0-9]{3})*,[0-9]{2}Double
我這樣做的方式是:extension function
const val NOTHING = ""
const val COMMA = ","
const val POINT = "."
val commaGrouped = "[0-9]+(,[0-9]{3})*\\.[0-9]{2}".toRegex()
val pointGrouped = "[0-9]+(\\.[0-9]{3})*,[0-9]{2}".toRegex()
fun String.commaCleaned() = replace(COMMA, NOTHING)
fun String.pointCleaned() = replace(POINT, NOTHING)
fun String.commaToPoint() = replace(COMMA, POINT)
fun String.pointToComma() = replace(POINT, COMMA)
fun String.toDouble() =
when {
commaGrouped matches this -> Double(commaCleaned())
pointGrouped matches this -> Double(pointCleaned().commaToPoint())
else -> throw IllegalArgumentException(
"the value ${this} can't be converted to ${Double::class.java} " +
"have match ${commaGrouped.pattern} " +
"or ${pointGrouped.pattern}")
}
意識(shí)到整數(shù)格式或超過兩個(gè)小數(shù)精度將不匹配以創(chuàng)建 ,這也是我想要的。Double
添加回答
舉報(bào)