1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Round large exponential numbers

This commit is contained in:
Alexander Tseung 2018-07-26 12:15:34 -07:00
parent cd2b67cdd9
commit d0c901d081
3 changed files with 23 additions and 6 deletions

View File

@ -5,6 +5,7 @@ import {
formatCurrency, formatCurrency,
convertTokenToFiat, convertTokenToFiat,
addFiat, addFiat,
roundExponential,
} from '../../../helpers/confirm-transaction/util' } from '../../../helpers/confirm-transaction/util'
export default class ConfirmTokenTransactionBase extends Component { export default class ConfirmTokenTransactionBase extends Component {
@ -42,7 +43,8 @@ export default class ConfirmTokenTransactionBase extends Component {
return this.context.t('noConversionRateAvailable') return this.context.t('noConversionRateAvailable')
} else { } else {
const fiatTransactionAmount = this.getFiatTransactionAmount() const fiatTransactionAmount = this.getFiatTransactionAmount()
return formatCurrency(fiatTransactionAmount, currentCurrency) const roundedFiatTransactionAmount = roundExponential(fiatTransactionAmount)
return formatCurrency(roundedFiatTransactionAmount, currentCurrency)
} }
} }
@ -54,7 +56,8 @@ export default class ConfirmTokenTransactionBase extends Component {
} else { } else {
const fiatTransactionAmount = this.getFiatTransactionAmount() const fiatTransactionAmount = this.getFiatTransactionAmount()
const fiatTotal = addFiat(fiatTransactionAmount, fiatTransactionTotal) const fiatTotal = addFiat(fiatTransactionAmount, fiatTransactionTotal)
return formatCurrency(fiatTotal, currentCurrency) const roundedFiatTotal = roundExponential(fiatTotal)
return formatCurrency(roundedFiatTotal, currentCurrency)
} }
} }

View File

@ -3,6 +3,7 @@ import currencies from 'currency-formatter/currencies'
import abi from 'human-standard-token-abi' import abi from 'human-standard-token-abi'
import abiDecoder from 'abi-decoder' import abiDecoder from 'abi-decoder'
import ethUtil from 'ethereumjs-util' import ethUtil from 'ethereumjs-util'
import BigNumber from 'bignumber.js'
abiDecoder.addABI(abi) abiDecoder.addABI(abi)
@ -137,3 +138,11 @@ export function convertTokenToFiat ({
export function hasUnconfirmedTransactions (state) { export function hasUnconfirmedTransactions (state) {
return unconfirmedTransactionsCountSelector(state) > 0 return unconfirmedTransactionsCountSelector(state) > 0
} }
export function roundExponential (value) {
const PRECISION = 4
const bigNumberValue = new BigNumber(value)
// In JS, numbers with exponentials greater than 20 get displayed as an exponential.
return bigNumberValue.e > 20 ? Number(bigNumberValue.toPrecision(PRECISION)) : value
}

View File

@ -1,6 +1,7 @@
import { createSelector } from 'reselect' import { createSelector } from 'reselect'
import txHelper from '../../lib/tx-helper' import txHelper from '../../lib/tx-helper'
import { calcTokenAmount } from '../token-util' import { calcTokenAmount } from '../token-util'
import { roundExponential } from '../helpers/confirm-transaction/util'
const unapprovedTxsSelector = state => state.metamask.unapprovedTxs const unapprovedTxsSelector = state => state.metamask.unapprovedTxs
const unapprovedMsgsSelector = state => state.metamask.unapprovedMsgs const unapprovedMsgsSelector = state => state.metamask.unapprovedMsgs
@ -133,7 +134,8 @@ export const tokenAmountAndToAddressSelector = createSelector(
const toParam = params.find(param => param.name === TOKEN_PARAM_TO) const toParam = params.find(param => param.name === TOKEN_PARAM_TO)
const valueParam = params.find(param => param.name === TOKEN_PARAM_VALUE) const valueParam = params.find(param => param.name === TOKEN_PARAM_VALUE)
toAddress = toParam ? toParam.value : params[0].value toAddress = toParam ? toParam.value : params[0].value
tokenAmount = valueParam ? Number(valueParam.value) : Number(params[1].value) const value = valueParam ? Number(valueParam.value) : Number(params[1].value)
tokenAmount = roundExponential(value)
} }
return { return {
@ -151,7 +153,8 @@ export const approveTokenAmountAndToAddressSelector = createSelector(
if (params && params.length) { if (params && params.length) {
toAddress = params.find(param => param.name === TOKEN_PARAM_SPENDER).value toAddress = params.find(param => param.name === TOKEN_PARAM_SPENDER).value
tokenAmount = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value) const value = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value)
tokenAmount = roundExponential(value)
} }
return { return {
@ -170,11 +173,13 @@ export const sendTokenTokenAmountAndToAddressSelector = createSelector(
if (params && params.length) { if (params && params.length) {
toAddress = params.find(param => param.name === TOKEN_PARAM_TO).value toAddress = params.find(param => param.name === TOKEN_PARAM_TO).value
tokenAmount = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value) let value = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value)
if (tokenDecimals) { if (tokenDecimals) {
tokenAmount = calcTokenAmount(tokenAmount, tokenDecimals) value = calcTokenAmount(value, tokenDecimals)
} }
tokenAmount = roundExponential(value)
} }
return { return {