Js /** * To quants satoshi, wei, etc... * * @param

{Number|String|BN} value
* @return {String}
*/
export function toMinimal (value, decimal) {
if (typeof decimal !== 'number') {
throw new TypeError('toMinimal error: decimal is not a number')
}

// hook for modify value like 1e-8
if (value.toString().indexOf('e') > 0) {
const valueParts = String(value).match(/^([\d.]+)e-?(\d+)$/)

value = `0.${new Array(parseInt(valueParts[2], 10)).join('0')}${valueParts[1].replace('.', '')}`
}

const [integerPart, fractionPart = ''] = value.toString().split(/[,.]/)
const paddedFraction = fractionPart.length < decimal
? fractionPart.padEnd(decimal, '0')
: fractionPart.substr(0, decimal)
const result = `${integerPart}${paddedFraction}`.replace(/^0+/, '')

if (result === '') {
return '0'
}

return result
}

/**
* To currency unit.
*
* @param {String|Number|BN} value
* @return {String}
*/
// eslint-disable-next-line no-shadow
export function toCurrency (value, decimal) {
if (typeof value === 'string') {
if (value.indexOf('.') !== -1) {
throw new Error(`${value} must not contain '.'`)
}
if (value.indexOf('-') !== -1) {
throw new Error(`${value} must not contain '-'`)
}
if (typeof decimal !== 'number') {
throw new TypeError('toCurrency error: decimal is not a number')
}
}

const valueBN = new BN(value)

if (valueBN.lte(0)) {
throw new Error('negative')
}
const valueString = new BN(value).toString()

const integerPart = valueString
.substring(0, valueString.length - decimal)
.replace(/^0+/, '') || 0

const fractionPart = valueString.substring(valueString.length - decimal)
.padStart(decimal, '0')
.replace(/0+$/, '')

if (fractionPart.search('-') !== -1) {
console.warn('convert: toCurrency: fractionPart is bad')
}

if (fractionPart !== '') {
return `${integerPart}.${fractionPart}`
}

return `${integerPart}`
}

1 ответов

3 просмотра

Похожие вопросы

Обсуждают сегодня

40 тысяч в час / 3600 = 11,11 в секунду... Вам точно нужна очередь? (я просто не знаю "контекста") Такое количество запросов любое приложение замечательно "прожует" и не попер...
Igor Mitin
5
Всем салют, заинтересовался odoo, хотел бы поинтересоваться на счёт этой ERP , прогеры которые работают над проектами вы используете odoo как серверную платформу работая с RES...
⚔️
8
А как асинхрон иначе реализован? Пардон:)
Ivan K 🏄🏻‍♂️
7
вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Друзья, за кем?
Magic
12
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Это что теперь, любой бот сможет принимать платежи без ебли с юр лицами?
Lencore
8
ого, спасибо Никит, ты как всегда кладезь нужной инфы! Сейчас пойду копаться, а мне релиз создать как и версию самого плагина? типа 1.0.8?
Alex Blaze
9
Не догоняю немного каким боком тут эппл Вот есть веб (мини) апп, который по факту веб сайт, просто в телеге веб вью и если там оплата, то нежно вот эти приседания?
e\\/gen
7
Карта сайта