UNPKG

@fruits-chain/react-native-xiaoshu

Version:
67 lines (55 loc) • 1.63 kB
export function range(num: number, min: number, max: number): number { return Math.min(Math.max(num, min), max) } function trimExtraChar(value: string, char: string, regExp: RegExp) { const index = value.indexOf(char) if (index === -1) { return value } if (char === '-' && index !== 0) { return value.slice(0, index) } return value.slice(0, index + 1) + value.slice(index).replace(regExp, '') } export function formatNumber( value: string, allowDot = true, allowMinus = true, ) { if (allowDot) { value = trimExtraChar(value, '.', /\./g) } else { value = value.split('.')[0] } if (allowMinus) { value = trimExtraChar(value, '-', /-/g) } else { value = value.replace(/-/, '') } const regExp = allowDot ? /[^-0-9.]/g : /[^-0-9]/g return value.replace(regExp, '') } export function formatThousandths(t: string, sign?: string) { !sign && (sign = ',') const parts = t.split('.') parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, sign) return parts.join('.') } export function formatDecimal(t: string, n: number) { const value = formatNumber(t) const mark = /-/.test(value) ? '-' : '' const values = (mark ? value.split('-')[1] || '' : value).split('.') const integer = values[0] const decimal = values[1] || '' if (n < 0) { if (values.length === 1) { return `${mark}${integer}` } return [`${mark}${integer}`, decimal].join('.') } else if (values.length === 1 || n === 0) { return `${mark}${integer}` } else { const d = decimal.match(new RegExp(`\\d{0,${n}}`))?.[0] return `${mark}${integer}.${d}` } }