[JAVA] Große Dezimalstelle in Kotlin

kotlin_800x320.png

Es ist ein paar Tage her, seit ich angefangen habe, Kotlin als Hobby zu benutzen, und ich bin beeindruckt von der sorgfältigen Unterstützung für Javas Juckreiz. BigDecimal-Arithmetik ist eine davon.

In Geschäftsanwendungen sind häufig numerische Vorgänge erforderlich, Double ist jedoch nicht verwendbar. Daher ist BigDecimal eine Option. Dieser BigDecimal-Vorgang ist äußerst unlesbar.

Vergleich des Codierungsstils

Basisausgabe

BigDecimalBasicSample.kt


/**
 * BigDecimal coding style : (a + b) / 2
 */
fun main(args: Array<String>) {
    val a = BigDecimal.ONE
    val b = BigDecimal.TEN

    // Java style
    println(a.add(b).divide(BigDecimal.valueOf(2L), RoundingMode.HALF_EVEN))

    // Kotlin basic style
    println((a + b) / 2.toBigDecimal())
}

Java ist schrecklich. Kotlin ist sehr einfach zu lesen, da es arithmetische Operatoren mit vier Regeln anwenden kann, aber "2.toBigDecimal ()" bleibt immer noch unzufrieden.

Erweiterte Version

BigDecimalCustomSample.kt



/** custome operator BigDecimal / Long */
operator fun BigDecimal.div(other : Long) : BigDecimal = this / other.toBigDecimal()

/**
 * BigDecimal coding style : (a + b) / 2
 */
fun main(args: Array<String>) {
    val a = BigDecimal.ONE
    val b = BigDecimal.TEN

    // Java style
    println(a.add(b).divide(BigDecimal.valueOf(2L), RoundingMode.UP))

    // Kotlin custom oeprator style
    println((a + b) / 2)
}

Durch die Implementierung des ursprünglichen Operators von "BigDecimal / Long" wurde die Lesbarkeit verbessert.

Über den Mechanismus

So implementieren Sie Kotlin-Operatoren

In Kotlin entsprechen Operatoren dem Aufruf einer bestimmten Methode. In Operator overloading sind jeder Operator und seine entsprechenden Die Vorgehensweise wird gezeigt. Das Folgende ist ein Auszug aus dem Operator mit vier Regeln.

Expression Translated to
a + b a.plus(b)
a - b a.minus(b)
a * b a.times(b)
a / b a.div(b)
a % b a.rem(b), a.mod(b) (deprecated)
a..b a.rangeTo(b)

Durch die Implementierung von Methoden wie "Plus" mit "Operator Fun" können Sie Ihre eigenen Operatoren zwischen beliebigen Klassen definieren.

Implementierung von Operatoren für BigDecimal

Die Operator-Implementierung ist in BigDecimals.kt in kotlin-stdlib enthalten. Es wird beschrieben. Auszug aus der Implementierung der Division "/" als Beispiel. Sie können sehen, dass "BigDecimal # divid" verwendet wird und "RoundingMode.HALF_EVEN" als Argument verwendet wird.

BigDecimals.kt


/**
 * Enables the use of the `/` operator for [BigDecimal] instances.
 *
 * The scale of the result is the same as the scale of `this` (divident), and for rounding the [RoundingMode.HALF_EVEN]
 * rounding mode is used.
 */
@kotlin.internal.InlineOnly
public inline operator fun BigDecimal.div(other: BigDecimal): BigDecimal = this.divide(other, RoundingMode.HALF_EVEN)

Recommended Posts

Große Dezimalstelle in Kotlin
HMAC in Kotlin
Java Big Decimal
[Ruby] Big Decimal und DECIMAL
Wie man Big Decimal benutzt
[Java] KClass in Java herunterladen [Kotlin]
[Java] Big Decimal richtig verwenden ~ 2018 ~
Apache POI Excel mit Kotlin
Implementierung von HashMap mit Kotlin
Bildschirmübergang mit Intent in Kotlin
Implementieren einer Materialdesignansicht in Kotlin
Nachahmung der funktionalen Schnittstelle von Java mit Kotlin
Warum funktioniert synchronisiertes Suspend in Kotlin nicht?
"Hallo Welt!" Mit Kotlin + CLI in 5 Minuten
Was Java-Programmierer mit Kotlin nützlich finden
Lassen Sie sich nicht auf Javas Big Decimal ein
Immer im Big Decimal-Memorandum für Anfänger