在 Javascript 中制作千 (k) 转换器函数而不舍入并且不从末尾删除 .0

问题描述

我正在尝试在 JS 中制作一个简单的 1000 到 k 的转换器函数,它将接受一个数字并将其转换为千/千。我无法让 .toFixed(1) 正常工作。 我不希望它四舍五入,我希望它显示一位小数,除非小数是 0。我希望产生的一些回报示例是:

1100 -> 1.1K

1199 -> 1.1K

9999 -> 9.9K

10900 -> 10.9K

10999 -> 10.9K

JS

   function kConvertor(num) {
     return num <= 999 ? num : (num/1000).toFixed(1) + 'k'
    }

这将返回 10.0k,这符合我不想要的两种情况 (9.9k)。 我在这里做错了什么?

我尝试在末尾添加 parseInt() 和 .replace('.0','') ,但没有用。

   function kConvertor(num) {
      return num <= 999 ? num : parseInt((num/1000)).toFixed(1).replace('.0','') + 'k'
   }

这只是返回 9k

解决方法

这是通过使用数学运算符正确舍入到 K 的最接近的 10 位,然后使用 .toFixed(1) 执行必要的字符串操作以从结果中去除 .0 来实现的:

function kConverter(num) {
    return num <= 999 ? num : (0.1 * Math.floor(num / 100)).toFixed(1).replace('.0','') + 'k'
}

注意:让函数返回 famous video 的瞬间。始终确保您的返回类型一致:

function kConverter(num) {
    if (num < 1000) {
        return number.toFixed(0);   // assuming an integer
    } else {
        const s = (0.1 * Math.floor(num / 100)).toFixed(1);
        return s.replace('.0','') + 'k';
    }
}