From 80726d17e2b6e4f2c6ec71f0f671034b4f8096ac Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Thu, 24 Oct 2024 12:49:44 +0200 Subject: [PATCH] Kotlin utvidelser for avrunding av tall (BigDecimal) (#297) * Utvidelser for avrunding av BigDecimal * Utvidelser for avrunding av BigDecimal * Utvidelser for avrunding av BigDecimal * Utvidelser for avrunding av BigDecimal --- .../no/nav/bidrag/domene/util/NumberUtil.kt | 7 +++++ .../bidrag/domene/util/NumberUtilKtTest.kt | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 bidrag-domene/src/test/kotlin/no/nav/bidrag/domene/util/NumberUtilKtTest.kt diff --git a/bidrag-domene/src/main/kotlin/no/nav/bidrag/domene/util/NumberUtil.kt b/bidrag-domene/src/main/kotlin/no/nav/bidrag/domene/util/NumberUtil.kt index 50d70033..4dd4dcdf 100644 --- a/bidrag-domene/src/main/kotlin/no/nav/bidrag/domene/util/NumberUtil.kt +++ b/bidrag-domene/src/main/kotlin/no/nav/bidrag/domene/util/NumberUtil.kt @@ -5,3 +5,10 @@ import java.math.MathContext import java.math.RoundingMode fun BigDecimal.årsbeløpTilMåndesbeløp() = divide(BigDecimal(12), MathContext(10, RoundingMode.HALF_UP)) + +fun BigDecimal.avrundet(antallDesimaler: Int) = setScale(antallDesimaler, RoundingMode.HALF_UP) + +val BigDecimal.avrundetTilNærmesteTier get() = divide(BigDecimal.TEN, 0, RoundingMode.HALF_UP).multiply(BigDecimal.TEN) +val BigDecimal.avrundetMedTiDesimaler get() = avrundet(10) +val BigDecimal.avrundetMedToDesimaler get() = avrundet(2) +val BigDecimal.avrundetMedNullDesimaler get() = avrundet(0) diff --git a/bidrag-domene/src/test/kotlin/no/nav/bidrag/domene/util/NumberUtilKtTest.kt b/bidrag-domene/src/test/kotlin/no/nav/bidrag/domene/util/NumberUtilKtTest.kt new file mode 100644 index 00000000..a499ed3f --- /dev/null +++ b/bidrag-domene/src/test/kotlin/no/nav/bidrag/domene/util/NumberUtilKtTest.kt @@ -0,0 +1,31 @@ +package no.nav.bidrag.domene.util + +import io.kotest.matchers.shouldBe +import org.junit.jupiter.api.Test +import java.math.BigDecimal + +class NumberUtilKtTest { + @Test + fun `Skal avrunde tall til desimaler for tall med flere desimaler`() { + val tallSomSkalAvrundes = BigDecimal("10.123456789101112") + tallSomSkalAvrundes.avrundetMedToDesimaler shouldBe BigDecimal("10.12") + tallSomSkalAvrundes.avrundetMedNullDesimaler shouldBe BigDecimal("10") + tallSomSkalAvrundes.avrundetMedTiDesimaler shouldBe BigDecimal("10.1234567891") + } + + @Test + fun `Skal avrunde tall til desimaler for tall med få desimaler`() { + val tallSomSkalAvrundes = BigDecimal("10.1") + tallSomSkalAvrundes.avrundetMedToDesimaler shouldBe BigDecimal("10.10") + tallSomSkalAvrundes.avrundetMedNullDesimaler shouldBe BigDecimal("10") + tallSomSkalAvrundes.avrundetMedTiDesimaler shouldBe BigDecimal("10.1000000000") + } + + @Test + fun `Skal avrunde tall til nærmeste tier`() { + BigDecimal("1024").avrundetTilNærmesteTier shouldBe BigDecimal("1020") + BigDecimal("1021").avrundetTilNærmesteTier shouldBe BigDecimal("1020") + BigDecimal("1025").avrundetTilNærmesteTier shouldBe BigDecimal("1030") + BigDecimal("1026").avrundetTilNærmesteTier shouldBe BigDecimal("1030") + } +}