From 2989dfd63d553125210fda6b83e21735e4a4961c Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Sun, 29 Oct 2023 20:54:55 +0000 Subject: [PATCH] Fix stripTrailingZeros() on early Android versions Provide a simple workaround --- src/main/java/org/joda/money/BigMoney.java | 4 ++++ src/test/java/org/joda/money/TestBigMoney.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/org/joda/money/BigMoney.java b/src/main/java/org/joda/money/BigMoney.java index eb94e3e..0be0073 100644 --- a/src/main/java/org/joda/money/BigMoney.java +++ b/src/main/java/org/joda/money/BigMoney.java @@ -111,6 +111,10 @@ public static BigMoney of(CurrencyUnit currency, BigDecimal amount) { */ public static BigMoney of(CurrencyUnit currency, double amount) { MoneyUtils.checkNotNull(currency, "Currency must not be null"); + // if statement added to support Android before v30 where stripTrailingZeros() is broken, see #129 + if (amount == 0d) { + return zero(currency); + } return BigMoney.of(currency, BigDecimal.valueOf(amount).stripTrailingZeros()); } diff --git a/src/test/java/org/joda/money/TestBigMoney.java b/src/test/java/org/joda/money/TestBigMoney.java index 79b4b6f..d385b88 100644 --- a/src/test/java/org/joda/money/TestBigMoney.java +++ b/src/test/java/org/joda/money/TestBigMoney.java @@ -195,6 +195,15 @@ public void test_factory_of_Currency_double_trailingZero2() { assertEquals(1, test.getScale()); } + @Test + public void test_factory_of_Currency_double_zero() { + assertEquals(BigMoney.of(GBP, BigDecimal.valueOf(0L, 0)), BigMoney.of(GBP, 0d)); + assertEquals(BigMoney.of(GBP, BigDecimal.valueOf(0L, 0)), BigMoney.of(GBP, -0d)); + assertEquals(BigMoney.of(GBP, BigDecimal.valueOf(0L, 0)), BigMoney.of(GBP, 0.0d)); + assertEquals(BigMoney.of(GBP, BigDecimal.valueOf(0L, 0)), BigMoney.of(GBP, 0.00d)); + assertEquals(BigMoney.of(GBP, BigDecimal.valueOf(0L, 0)), BigMoney.of(GBP, -0.0d)); + } + @Test public void test_factory_of_Currency_double_medium() { BigMoney test = BigMoney.of(GBP, 2000d);