Convert long number into abbreviated string in JavaScript, with a special shortness requirement

前端 未结 16 2523
名媛妹妹
名媛妹妹 2020-11-30 22:33

In JavaScript, how would one write a function that converts a given [edit: positive integer] number (below 100 billion) into a 3-letter abbreviation -- where 0-9 an

16条回答
  •  青春惊慌失措
    2020-11-30 22:55

    @nimesaram

    Your solution will not be desirable for the following case:

    Input 50000
    Output 50.0k
    

    Following solution will work fine.

    const convertNumberToShortString = (
      number: number,
      fraction: number
    ) => {
      let newValue: string = number.toString();
      if (number >= 1000) {
        const ranges = [
          { divider: 1, suffix: '' },
          { divider: 1e3, suffix: 'k' },
          { divider: 1e6, suffix: 'm' },
          { divider: 1e9, suffix: 'b' },
          { divider: 1e12, suffix: 't' },
          { divider: 1e15, suffix: 'p' },
          { divider: 1e18, suffix: 'e' }
        ];
        //find index based on number of zeros
        const index = Math.floor(Math.abs(number).toString().length / 3);
        let numString = (number / ranges[index].divider).toFixed(fraction);
        numString =
          parseInt(numString.substring(numString.indexOf('.') + 1)) === 0
            ? Math.floor(number / ranges[index].divider).toString()
            : numString;
        newValue = numString + ranges[index].suffix;
      }
      return newValue;
    };
    
    // Input 50000
    // Output 50k
    // Input 4500
    // Output 4.5k
    

提交回复
热议问题