diff --git a/core/src/main/java/haveno/core/util/coin/CoinUtil.java b/core/src/main/java/haveno/core/util/coin/CoinUtil.java index 4ad56251..4c4dc516 100644 --- a/core/src/main/java/haveno/core/util/coin/CoinUtil.java +++ b/core/src/main/java/haveno/core/util/coin/CoinUtil.java @@ -84,8 +84,8 @@ public class CoinUtil { return getRoundedAtmCashAmount(amount, price, maxTradeLimit); } else if (CurrencyUtil.isVolumeRoundedToNearestUnit(currencyCode)) { return getRoundedAmountUnit(amount, price, maxTradeLimit); - } else if (CurrencyUtil.isTraditionalCurrency(currencyCode)) { - return getRoundedAmountPrecise(amount, price, maxTradeLimit); + } else if (CurrencyUtil.isFiatCurrency(currencyCode)) { + return getRoundedAmount4Decimals(amount, price, maxTradeLimit); } return amount; } @@ -107,7 +107,7 @@ public class CoinUtil { return getAdjustedAmount(amount, price, maxTradeLimit, 1); } - public static BigInteger getRoundedAmountPrecise(BigInteger amount, Price price, long maxTradeLimit) { + public static BigInteger getRoundedAmount4Decimals(BigInteger amount, Price price, long maxTradeLimit) { DecimalFormat decimalFormat = new DecimalFormat("#.####"); double roundedXmrAmount = Double.parseDouble(decimalFormat.format(HavenoUtils.atomicUnitsToXmr(amount))); return HavenoUtils.xmrToAtomicUnits(roundedXmrAmount); diff --git a/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferDataModel.java b/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferDataModel.java index 871b6af8..d424c2b3 100644 --- a/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferDataModel.java +++ b/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferDataModel.java @@ -48,7 +48,6 @@ import haveno.core.xmr.model.XmrAddressEntry; import haveno.core.xmr.wallet.Restrictions; import haveno.core.xmr.wallet.XmrWalletService; import haveno.desktop.Navigation; -import haveno.desktop.util.DisplayUtils; import haveno.desktop.util.GUIUtil; import haveno.network.p2p.P2PService; import javafx.beans.property.BooleanProperty; @@ -519,12 +518,16 @@ public abstract class MutableOfferDataModel extends OfferDataModel { void calculateAmount() { if (isNonZeroPrice.test(price) && isNonZeroVolume.test(volume) && allowAmountUpdate) { try { - BigInteger value = HavenoUtils.coinToAtomicUnits(DisplayUtils.reduceTo4Decimals(HavenoUtils.atomicUnitsToCoin(price.get().getAmountByVolume(volume.get())), btcFormatter)); - value = CoinUtil.getRoundedAmount(value, price.get(), getMaxTradeLimit(), tradeCurrencyCode.get(), paymentAccount.getPaymentMethod().getId()); - + Volume volumeBefore = volume.get(); calculateVolume(); - amount.set(value); + // if the volume != amount * price, we need to adjust the amount + if (amount.get() == null || !volumeBefore.equals(price.get().getVolumeByAmount(amount.get()))) { + BigInteger value = price.get().getAmountByVolume(volumeBefore); + value = CoinUtil.getRoundedAmount(value, price.get(), getMaxTradeLimit(), tradeCurrencyCode.get(), paymentAccount.getPaymentMethod().getId()); + amount.set(value); + } + calculateTotalToPay(); } catch (Throwable t) { log.error(t.toString());