始终显示 3 位数字和描述符

问题描述 投票:0回答:2

使用 Javascript,我想将数字格式化为始终显示 3 位数字及其正确的标识符(例如:百万、千)。如果低于100,000,数字应该只显示“千”位

所有数字都将是零以上的整数,最高数字将达到数万亿。

我正在寻找的一些例子:

  • 1千
  • 13千
  • 627千
  • 285万
  • 6790万
  • 1.53亿
  • 95.2亿
  • 等等...

我尝试过的所有解决方案最终都变成了意大利面条代码,我希望有人能找到一个干净、智能的解决方案。

编辑:

我最终使用了 RobG 解决方案的一部分,但自己解决了具体细节。我还添加了舍入

function getNumberName(num) {
  var numNames = ['', 'Thousand', 'Million', 'Billion', 'Trillion'];
  num = num.toString();
  var len = num.length - 1;
  return numNames[len / 3 | 0];
}

function test(num) {
  var numStr = num.toString();
  if (num < 1000) {
    return numStr;
  } else if (num < 1000000) {
    return numStr.slice(0, -3) + "," + numStr.slice(-3);
  }
  numStr = Math.round(parseFloat(numStr.slice(0, 3) + "." + numStr[3])).toString() + Array(numStr.slice(3).length + 1).join("0");
  var remainder = numStr.length % 3;
  var before = numStr.slice(0, remainder);
  var after = numStr.slice(remainder, 3);
  var sep = "";
  if (before.length) {
    sep = ".";
  }
  return before + sep + after + " " + getNumberName(num);
}

var nums = [0, 1, 12, 123, 1234, 12345, 123456, 1237567, 12325678, 123856789, 123e7, 125e8, 123.6e9, 123e10];

nums.forEach(function(num) {
  document.write(num + ":  $" + test(num) + "<br/>");
});

javascript formatting number-formatting
2个回答
0
投票

对于整数,您可以尝试将数字缩短到所需的位数,然后添加名称,例如

// For integers
function getNumberName(num) {
  var numNames = ['','Thousand','Million','Billion'];
  var num = num.toString()
  var len = num.length - 1;
  var pow = numNames[len/3 | 0];
  return pow;
}

// For integers
function abbreviateNumber(num, places) {
  places = places || 0;
  var len = num.toString().length - 1;
  var pow = len/3 | 0
  return (num < 1000? num : num/Math.pow(10, pow*3)).toFixed(places);
}

function getNumberAbbr(num, places) {
  return abbreviateNumber(num, places) + ' ' + getNumberName(num);
}

var nums = [0,1,12,123,1234,12345,123456,1234567,12345678,123456789,123e7]

nums.forEach(function(num) {
  console.log(num + ' : ' + getNumberAbbr(num,1));
});

以上内容并不完整。应该施加一个限制,以便超过(例如 1 万亿)时,它会停止缩短数字。


0
投票

可能有更好的方法,但这会起作用:

function getTextNums(number) {
    
    if ((number/1000000) < 1) {
        var n = number.toString();
        var first3 = n.substring(0, 3);
        console.log(first3 + "Thousand");
    } else if((number/1000000000) < 1) {
        var n = number.toString();
        var first3 = n.substring(0, 3);
        console.log(first3 + "Million");
    } else if((number/1000000000000) < 1) {
        var n = number.toString();
        var first3 = n.substring(0, 3);
        console.log(first3 + "Billion");
    } else if((number/1000000000000000) < 1) {
        var n = number.toString();
        var first3 = n.substring(0, 3);
        console.log(first3 + "Trillion");
    } else {
        
    }
}

getTextNums(4533544433000)
© www.soinside.com 2019 - 2024. All rights reserved.