Correctly parse negative numbers and calculate temperatures.

This commit is contained in:
Filip 2025-01-23 21:49:37 +01:00
parent 374ba46db5
commit 727b316530

View file

@ -7,12 +7,18 @@ fun Double.round(): String{
return String.format("%.2f", this)
}
fun cleanNumberString(input: String): String{
return input
.replace(",",".")
.replace(" ", "")
}
fun extractNumbers(pattern: String, text: String?): List<Double> {
val matches = Regex(pattern).findAll(text ?: "")
return matches
.map { it.groups[1]?.value?.lowercase() }
.filter { it != null }
.map { it!!.replace(",", ".").toDouble() }
.map { cleanNumberString(it!!).toDouble() }
.toList()
}
@ -47,16 +53,16 @@ fun convertKmh(event: MessageCreateEvent) {
}
fun convertF(event: MessageCreateEvent){
for (fahrenheit in extractNumbers("(\\d+[,.]*\\d*)\\s*f", event.message.content)) {
val celsius = (5/9) * (fahrenheit - 32)
for (fahrenheit in extractNumbers("(-*\\d+[,.]*\\d*)\\s*f", event.message.content)) {
val celsius = (5.0/9.0) * (fahrenheit - 32)
val kelvin = celsius + 273.15
event.channel.sendMessage("${fahrenheit.round()} °F = ${celsius.round()} °C = ${kelvin.round()} K")
}
}
fun convertC(event: MessageCreateEvent){
for (celsius in extractNumbers("(\\d+[,.]*\\d*)\\s*c", event.message.content)) {
val fahrenheit = ((9/5) * celsius) + 32
for (celsius in extractNumbers("(-*\\d+[,.]*\\d*)\\s*c", event.message.content)) {
val fahrenheit = ((9.0/5.0) * celsius) + 32
val kelvin = celsius + 273.15
event.channel.sendMessage("${celsius.round()} °C = ${fahrenheit.round()} °F = ${kelvin.round()} K")
}