shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.93k stars 510 forks source link

【Q737】如何取得一个数字的小数部分与整数部分 #764

Open shfshanyue opened 2 years ago

shfshanyue commented 2 years ago

试举几例

引用一些第三方包处理也可以

heretic-G commented 2 years ago
function splitNum (data: unknown): [string, string] {
    if (typeof data === 'number' && !isNaN(data)) {
        const dataStr = data.toString()
        const eIndex = dataStr.indexOf('e-')
        if (eIndex > -1) {
            const result = dataStr.split('e-')
            return ['0', `0.${'0'.repeat(Number(result[1]) - 1)}${result[0].replace('.', '')}`]
        } else {
            const result = dataStr.split('.')
            if (result.length === 1) {
                result.push('0')
            }
            return [result[0], `0.${result[1]}`]
        }
    }
    return ['0', '0']
}
Feahter commented 2 years ago
/**科学计数法兼容*/
const SNFn = (val: string) => {
  let state = val.includes('e-');
  let splitStr = `e${state ? '-' : '+'}`;
  let data = val.split(splitStr);
  let fixBit = Number(data[1]);
  let temp = data[0];
  if (temp.includes('.')) {
    let poinitPosition = temp.indexOf('.');
    let len = temp.length;
    fixBit = fixBit + (poinitPosition + (state ? 0 : 1)) - len;
    temp = `${temp}`.replace('.', '');
  }
  let result = state
    ? `0.${`0`.repeat(fixBit)}${temp}`
    : `${temp}${`0`.repeat(fixBit)}`;
  if (state && result.includes('-')) {
    result = `-${result.replace('-', '')}`;
  }
  return state ? [`0`, result] : [result, `0`];
};

/**main*/
const splitFn = (val: number) => {
  const valStr = `${val}`;
  /**完全整数返回*/
  if (!valStr.includes('.') && !valStr.includes('e')) return [valStr, `0`];
  /**科学计数法兼容*/
  if (valStr.includes('e')) {
    let result = SNFn(valStr);
    return result;
  }
  /**正常含小数返回*/
  const result = valStr.split('.');
  let state=result[0].includes('-')
  return [`${result[0]}`, `${state?'-':''}0.${result[1]}`];
};

https://stackblitz.com/edit/typescript-hr1bbp