- {getFormattedText(amount_display * getRoundedNumber(rate), local_currency)}
+ {display_payment_amount} {local_currency}
)}
@@ -143,11 +149,11 @@ const OrderDetails = observer(({ onPageReturn }) => {
diff --git a/packages/p2p/src/stores/buy-sell-store.js b/packages/p2p/src/stores/buy-sell-store.js
index e60af1fd754e..5b5166ccc0c1 100644
--- a/packages/p2p/src/stores/buy-sell-store.js
+++ b/packages/p2p/src/stores/buy-sell-store.js
@@ -1,10 +1,11 @@
import { action, computed, observable, reaction } from 'mobx';
-import { formatMoney, getDecimalPlaces, getRoundedNumber, isMobile } from '@deriv/shared';
+import { formatMoney, getDecimalPlaces, isMobile } from '@deriv/shared';
import { localize } from 'Components/i18next';
import { buy_sell } from 'Constants/buy-sell';
import { requestWS } from 'Utils/websocket';
import { textValidator, lengthValidator } from 'Utils/validations';
import { countDecimalPlaces } from 'Utils/string';
+import { removeTrailingZeros } from 'Utils/format-value.js';
import BaseStore from 'Stores/base_store';
export default class BuySellStore extends BaseStore {
@@ -408,10 +409,7 @@ export default class BuySellStore extends BaseStore {
@action.bound
setInitialReceiveAmount(initial_price) {
- this.receive_amount = getRoundedNumber(
- this.advert.min_order_amount_limit * initial_price,
- this.advert.local_currency
- );
+ this.receive_amount = removeTrailingZeros(this.advert.min_order_amount_limit * initial_price);
}
@action.bound
diff --git a/packages/p2p/src/stores/floating-rate-store.js b/packages/p2p/src/stores/floating-rate-store.js
index c6dd1a7f07ce..3bff6fe38b51 100644
--- a/packages/p2p/src/stores/floating-rate-store.js
+++ b/packages/p2p/src/stores/floating-rate-store.js
@@ -2,6 +2,7 @@ import { action, computed, observable } from 'mobx';
import { ad_type } from 'Constants/floating-rate';
import BaseStore from 'Stores/base_store';
import ServerTime from 'Utils/server-time';
+import { roundOffDecimal, removeTrailingZeros } from 'Utils/format-value';
export default class FloatingRateStore extends BaseStore {
@observable fixed_rate_adverts_status;
@@ -66,7 +67,8 @@ export default class FloatingRateStore extends BaseStore {
@action.bound
setExchangeRate(rate) {
- this.exchange_rate = parseFloat(rate);
+ const fetched_rate = parseFloat(rate);
+ this.exchange_rate = removeTrailingZeros(roundOffDecimal(fetched_rate, 6));
if (this.previous_exchange_rate === null) {
this.previous_exchange_rate = this.exchange_rate;
this.current_exchange_rate = this.exchange_rate;
diff --git a/packages/p2p/src/utils/format-value.js b/packages/p2p/src/utils/format-value.js
index 282d9332b2d2..5d0bc2d78970 100644
--- a/packages/p2p/src/utils/format-value.js
+++ b/packages/p2p/src/utils/format-value.js
@@ -1,5 +1,11 @@
+import { ad_type } from 'Constants/floating-rate';
+import { formatMoney } from '@deriv/shared';
+
export const roundOffDecimal = (number, decimal_place = 2) => {
// Rounds of the digit to the specified decimal place
+ if (number === null || number === undefined) {
+ return 0;
+ }
return parseFloat(Math.round(number * Math.pow(10, decimal_place)) / Math.pow(10, decimal_place));
};
@@ -12,13 +18,35 @@ export const setDecimalPlaces = (value, expected_decimal_place) => {
return actual_decimal_place > expected_decimal_place ? expected_decimal_place : actual_decimal_place;
};
+export const generateEffectiveRate = ({
+ price = 0,
+ rate = 0,
+ local_currency = {},
+ exchange_rate = 0,
+ rate_type = ad_type.FIXED,
+} = {}) => {
+ let effective_rate = 0;
+ let display_effective_rate = 0;
+ if (rate_type === ad_type.FIXED) {
+ effective_rate = price;
+ display_effective_rate = formatMoney(local_currency, effective_rate, true);
+ } else {
+ effective_rate = parseFloat(exchange_rate * (1 + rate / 100));
+ display_effective_rate = removeTrailingZeros(
+ formatMoney(local_currency, effective_rate, true, setDecimalPlaces(effective_rate, 6))
+ );
+ }
+ return { effective_rate, display_effective_rate };
+};
+
export const removeTrailingZeros = value => {
+ // Returns the string after truncating extra zeros
if (!value) {
return '';
}
const [input, unit] = value.toString().trim().split(' ');
if (input.indexOf('.') === -1) {
- return input;
+ return formatInput(input, unit);
}
let trim_from = input.length - 1;
do {
@@ -29,8 +57,17 @@ export const removeTrailingZeros = value => {
if (input[trim_from] === '.') {
trim_from--;
}
- const result = value.substr(0, trim_from + 1);
- return parseFloat(result) % 1 !== 0
- ? `${result}.00 ${unit ? unit.trim() : ''}`
- : `${result} ${unit ? unit.trim() : ''}`;
+ const result = value.toString().substr(0, trim_from + 1);
+ return formatInput(result, unit);
+};
+
+const formatInput = (input, unit) => {
+ const plain_input = input.replace(/,/g, '');
+ if (parseFloat(plain_input) % 1 === 0) {
+ return `${input}.00 ${unit ? unit.trim() : ''}`;
+ }
+ if (plain_input.split('.')[1].length === 1) {
+ return `${input}0 ${unit ? unit.trim() : ''}`;
+ }
+ return `${input}${unit ? ` ${unit.trim()}` : ''}`;
};