Kotlin BigDecimal로.


취미로 Kotlin을 만지기 시작한 며칠 동안 자바의 간지러운 곳은 열심히 지지해 감동을 받았다.BigDecimal 연산도 그 중 하나입니다.
업무 응용 프로그램에서 수치 연산이 필요한 경우가 많지만 Double는 사용할 수 없기 때문에 BigDecimal의 선택이다.그리고 이 BigDecimal 연산은 가독성이 매우 낮다.

인코딩 스타일 비교


기본편


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())
}
자바는 엉망이야.
Kotlin은 사칙 연산의 산자를 응용할 수 있기 때문에 매우 쉽게 볼 수 있다.그러나 2.toBigDecimal() 불만은 여전히 있다.

응용편


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)
}
설치BigDecimal / Long의 단독 계산을 통해 가독성이 한층 높아졌다.

구조 정보


Kotlin 산자의 실현 방법


Kotlin에서 연산자는 호출된 방법과 같은 값입니다.Operator overloading에서 각 산자와 그에 대응하는 방법을 나타냈다.네 가지 연산자를 발췌하면 다음과 같다.
Expression
Translated toa + 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) plus 등 방법은 operator fun에 설치하여 임의의 클래스 간의 산자를 단독으로 정의할 수 있다.

BigDecimal을 위한 연산자


kotlin-stdlib에 포함된 BigDecimals.kt 연산자의 설치를 기술했습니다.샘플 발췌 제법 "/"의 설치입니다.BigDecimal#divide이 이용되고 파라미터RoundingMode.HALF_EVEN가 사용된 것을 확인할 수 있다.
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)

좋은 웹페이지 즐겨찾기