Как сделать функцию добавления к числу буквы миллиона или тысячи и обрезать число?
Сделал функцию, она считает только миллионы. Но chunk работает так что в любом случае в первом элементе массива будет 3 цифры 3300 должно стать 3,3K, 5500000 -> 5,5M
const creepsCount = (count) => {
const arr = _.chunk(String(count), 3)
let letter;
if (arr.length === 3) letter = 'm'
return _.concat(arr[0], letter)
}
console.log(creepsCount(3300))
console.log(creepsCount(5500000))
<script src="//cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
Ответы (3 шт):
Автор решения: Konstantin Modin
→ Ссылка
Можно написать например так:
const cutNumber = (n) => {
const format = (toCut, letter) => String(n).slice(0, -toCut) + letter;
if (n > 999999) {
return format(6, "M");
}
if (n > 999) {
return format(3, "K");
}
return n;
};
console.log("cutNumber(999)", cutNumber(999));
console.log("cutNumber(1000)", cutNumber(1000));
console.log("cutNumber(50000)", cutNumber(50000));
console.log("cutNumber(1000000)", cutNumber(1000000));
console.log("cutNumber(10000000)", cutNumber(10000000));
console.log("cutNumber(1234567)", cutNumber(1234567));
Автор решения: Yaant
→ Ссылка
const creepsCount = (count) => {
const suffixes = ['', 'K', 'M', 'B', 'T'];
const str = count+'';
return str.slice(0, (str.length - 1) % 3 + 1) + suffixes[(str.length / 3) | 0]
}
console.log(creepsCount(3000));
console.log(creepsCount(5000000));
console.log(creepsCount(123456789));
console.log(creepsCount(42));
Автор решения: Qwertiy
→ Ссылка
function format(n) {
for (var { k, suf } of [
{ k: 1e9, suf: "G" },
{ k: 1e6, suf: "M" },
{ k: 1e3, suf: "K" },
]) {
if (Math.round(n / (k / 1000)) >= 1000) {
return Math.round(n / k) + suf
}
}
return Math.round(n) + ""
};
var res = []
for (var d of [0, 1e9, 5e9, 1e12]) {
for (var c of [0, 1e6, 490e6, 500e6, 501e6, 999e6]) {
for (var b of [0, 1e3, 490e3, 500e3, 501e3, 999e3]) {
for (var a of [0, 1, 499, 500, 501, 999]) {
var x = a + b + c + d
res.push(x + " => " + format(x))
}
}
}
}
console.log(res.join("\n"))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Если надо округлять до 1 знака после запятой, то можно
return Math.round(n / k) + suf
заменить на
return Math.round(n / (k / 10)) / 10 + suf
Можно использовать toFixed(1) чтобы он всегда отображался.
И вариант без округления:
function format(n) {
for (var { k, suf } of [
{ k: 1e9, suf: "G" },
{ k: 1e6, suf: "M" },
{ k: 1e3, suf: "K" },
]) {
if (n >= k) {
return Math.floor(n / k) + suf
}
}
return Math.floor(n) + ""
};
var res = []
for (var d of [0, 1e9, 5e9, 1e12]) {
for (var c of [0, 1e6, 490e6, 500e6, 501e6, 999e6]) {
for (var b of [0, 1e3, 490e3, 500e3, 501e3, 999e3]) {
for (var a of [0, 1, 499, 500, 501, 999]) {
var x = a + b + c + d
res.push(x + " => " + format(x))
}
}
}
}
console.log(res.join("\n"))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }