@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
67 lines (55 loc) • 1.63 kB
text/typescript
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}`
}
}