Use HALF_EVEN rounding mode by default for BigDecimal division operator.
#KT-10462 Fixed
This commit is contained in:
@@ -5,6 +5,7 @@ package kotlin
|
|||||||
|
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
|
import java.math.RoundingMode
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables the use of the `+` operator for [BigInteger] instances.
|
* Enables the use of the `+` operator for [BigInteger] instances.
|
||||||
@@ -57,9 +58,12 @@ public inline operator fun BigDecimal.times(other: BigDecimal) : BigDecimal = th
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables the use of the `/` operator for [BigDecimal] instances.
|
* 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
|
@kotlin.internal.InlineOnly
|
||||||
public inline operator fun BigDecimal.div(other: BigDecimal) : BigDecimal = this.divide(other)
|
public inline operator fun BigDecimal.div(other: BigDecimal) : BigDecimal = this.divide(other, RoundingMode.HALF_EVEN)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables the use of the `%` operator for [BigDecimal] instances.
|
* Enables the use of the `%` operator for [BigDecimal] instances.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package numbers
|
package numbers
|
||||||
|
|
||||||
|
import java.math.BigDecimal
|
||||||
import org.junit.Test as test
|
import org.junit.Test as test
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
@@ -38,4 +39,15 @@ class NumbersJVMTest {
|
|||||||
assertEquals(java.lang.Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY)
|
assertEquals(java.lang.Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY)
|
||||||
assertEquals(java.lang.Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY)
|
assertEquals(java.lang.Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test fun bigDecimalDivRounding() {
|
||||||
|
val (d1, d2, d3, d4, d5) = (1..5).map { BigDecimal(it.toString()) }
|
||||||
|
val d7 = BigDecimal("7")
|
||||||
|
|
||||||
|
assertEquals(d1, d2 / d3)
|
||||||
|
assertEquals(d2, d3 / d2)
|
||||||
|
assertEquals(d2, d5 / d2)
|
||||||
|
assertEquals(d4, d7 / d2)
|
||||||
|
assertEquals(d1, d7 / d5)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user