eloo
eloo

Reputation: 311

How to define number of decimals in Kotlin/JS and Kotlin/Wasm?

Let's imagine something like this:

var num: Float = 0.0f
num = 2.4 * 3.5 / 3.8

num has several decimals, but I want only 2.

In JS I would use num.toFixed(2).

Other answers here suggest to use "%.2f".format(num) or num.format(2). The latter needs a custom extension function:

fun Double.format(digits: Int) = java.lang.String.format("%.${digits}f", this)

However, any of these options leads to a compiler error of "unresolved reference". I don't think it is a question of imports because the compiler would suggest it.

Is there an easy way to do this?

Upvotes: 8

Views: 2784

Answers (2)

Mahozad
Mahozad

Reputation: 24732

For Kotlin/Wasm, this is how it can be done.
Note that the function return type should be kotlin.js.JsNumber:

val myValue = 0.12345f
val myValue2Decimals = roundTo2Decimals(myValue)
fun roundTo2Decimals(number: Float): JsNumber = js("number.toFixed(2)")

Upvotes: 0

Ilya
Ilya

Reputation: 23164

Kotlin standard library for JS doesn't have anything like Double.format yet, but you can implement it easily with aforementioned toFixed function available in javascript:

fun Double.format(digits: Int): String = this.asDynamic().toFixed(digits)
fun Float.format(digits: Int): String = this.asDynamic().toFixed(digits)

This works because Double and Float in Kotlin are represented with Number data type in JS, so you can call toFixed() function on instances of those types.

Upvotes: 12

Related Questions