Можно ли расширить / переопределить Kotlin Double.toString, чтобы получить меньше десятичных знаков? - PullRequest
0 голосов
/ 18 марта 2019

У меня уже есть хак:

/** Shorter round for the logs */
val Double.str: String
    get() = "%.3f".format(this)

Но это должно быть вручную вставлено во все мои LOG.info { "It went ${distance.str}" } операторы.Я бы предпочел иметь возможность устанавливать (с плавающей и десятичной) значащие цифры во всем мире.Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Нет, нет способа сделать это. Вместо этого вы можете переопределить ваши LOG методы, но они, вероятно, должны будут принимать части как отдельные параметры (т.е. LOG.info("It went {}", distance) или LOG.info { myformat("It went {}", distance) }). Вам нужно решить, хотите ли вы компромисса.

Единственный способ работы LOG.info { "It went ${distance}" }, который я вижу, - это найти числа в интерполированной строке с помощью регулярных выражений и заменить их. Это довольно уродливый и относительно медленный взлом.

0 голосов
/ 18 марта 2019

Кажется, поможет функция расширения класса:

fun Double.str(decPlaces: Int): String = "%.${decPlaces}f".format(this)

и использовать ее как

LOG.info { "It went ${distance.str(3)}" }
...