Kotlin BigDecimal로.
6677 단어 operatorKotlinBigDecimalJava
취미로 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)
Reference
이 문제에 관하여(Kotlin BigDecimal로.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ino-shin/items/760b27de552ac9cef602
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/**
* 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())
}
/** 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)
}
Kotlin 산자의 실현 방법
Kotlin에서 연산자는 호출된 방법과 같은 값입니다.Operator overloading에서 각 산자와 그에 대응하는 방법을 나타냈다.네 가지 연산자를 발췌하면 다음과 같다.
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)
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)
Reference
이 문제에 관하여(Kotlin BigDecimal로.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ino-shin/items/760b27de552ac9cef602텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)