feat: Suffixed Decimals
This commit is contained in:
parent
1c0cc228f6
commit
490b99503c
|
@ -68,10 +68,12 @@ export default {
|
|||
cappedValueText() {
|
||||
return this.unit === 'maxAge'
|
||||
? this.$store.getters.ageText
|
||||
: this.cappedValue
|
||||
: this.$store.getters.suffixedDecimalText(this.cappedValue)
|
||||
},
|
||||
maxText() {
|
||||
return this.unit === 'maxAge' ? this.$store.getters.ageMaxText : this.max
|
||||
return this.unit === 'maxAge'
|
||||
? this.$store.getters.ageMaxText
|
||||
: this.$store.getters.suffixedDecimalText(this.max)
|
||||
},
|
||||
clickable() {
|
||||
return !this.disabled && this.value >= this.max
|
||||
|
|
|
@ -566,6 +566,57 @@ export const getters = {
|
|||
process.created ? totalInstruments + 1 : totalInstruments,
|
||||
0
|
||||
),
|
||||
suffixedDecimalText: (state) => (n) => {
|
||||
const DIGITS_AFTER_DP = 3
|
||||
const suffixValues = { Z: 0, k: 1e3, M: 1e6, B: 1e9, T: 1e12, X: 1e15 }
|
||||
n = new Decimal(n)
|
||||
|
||||
// iterate over object above to find text suffix and divsior value
|
||||
let largestSuffix = ''
|
||||
let largestValue = 0
|
||||
for (const suffix in suffixValues) {
|
||||
if (
|
||||
n.greaterThanOrEqualTo(suffixValues[suffix]) &&
|
||||
suffixValues[suffix] > largestValue
|
||||
) {
|
||||
largestSuffix = suffix
|
||||
largestValue = suffixValues[suffix]
|
||||
}
|
||||
}
|
||||
|
||||
// Special case: Small numbers are just displayed
|
||||
if (largestValue === 0) return Math.floor(n)
|
||||
|
||||
// Special case: wicked large numbers are shown in scientific notation
|
||||
if (largestSuffix === 'X') {
|
||||
largestSuffix = 'e' + n.exponent
|
||||
largestValue = new Decimal.fromMantissaExponent(1, n.exponent) // eslint-disable-line new-cap
|
||||
}
|
||||
|
||||
// display value is always in [1, 1000)
|
||||
let displayValue = n.divide(largestValue).toString()
|
||||
// whole exact millions, billions, etc. have no decimal part, and need one built from text
|
||||
if (!displayValue.includes('.')) displayValue += '.'
|
||||
|
||||
// All suffixes should always show exactly DIGITS_AFTER_DP digits; add zeros or truncate
|
||||
const valuesBeforeDP = displayValue.substr(
|
||||
0,
|
||||
displayValue.indexOf('.')
|
||||
).length
|
||||
let valuesAfterDP = displayValue.substr(displayValue.indexOf('.')).length
|
||||
if (valuesAfterDP > DIGITS_AFTER_DP - 1) {
|
||||
displayValue = displayValue.substr(
|
||||
0,
|
||||
valuesBeforeDP + DIGITS_AFTER_DP + 1
|
||||
)
|
||||
}
|
||||
while (valuesAfterDP < DIGITS_AFTER_DP + 1) {
|
||||
valuesAfterDP += 1
|
||||
displayValue += '0'
|
||||
}
|
||||
|
||||
return displayValue + largestSuffix
|
||||
},
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
|
|
Reference in New Issue