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

Javascript 始终使用3位数字和描述符显示数字,javascript,formatting,number-formatting,Javascript,Formatting,Number Formatting,使用Javascript,我希望格式化一个数字,使其始终显示3位数字,以及它的正确标识符(例如:百万,千)。如果低于100000,则数字应仅显示“千”位数 所有数字都将是零以上的整数,最高的数字将达到万亿 我正在寻找的几个例子: 一千 一万三千 62.7万 285万 6790万 1.53亿 95.2亿 等等 我尝试过的所有解决方案最终都变成了意大利面代码,我希望有人能找到一个干净、智能的解决方案 编辑: 我最终使用了RobG解决方案的一部分,但我自己解决了具体问题。我还加了四舍五入 函数g

使用Javascript,我希望格式化一个数字,使其始终显示3位数字,以及它的正确标识符(例如:百万,千)。如果低于100000,则数字应仅显示“千”位数

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

我正在寻找的几个例子:

  • 一千
  • 一万三千
  • 62.7万
  • 285万
  • 6790万
  • 1.53亿
  • 95.2亿
  • 等等
我尝试过的所有解决方案最终都变成了意大利面代码,我希望有人能找到一个干净、智能的解决方案

编辑:

我最终使用了RobG解决方案的一部分,但我自己解决了具体问题。我还加了四舍五入

函数getNumberName(num){ var numNames=[''‘千’、‘百万’、‘十亿’、‘万亿’]; num=num.toString(); var len=num.length-1; 返回数值[len/3 | 0]; } 功能测试(num){ var numStr=num.toString(); 如果(数值<1000){ 返回numStr; }否则如果(数量<1000000){ 返回numStr.slice(0,-3)+“,”+numStr.slice(-3); } numStr=Math.round(parseFloat(numStr.slice(0,3)+“+numStr[3])).toString()+数组(numStr.slice(3.length+1).连接(“0”); var余数=numStr.length%3; var before=numStr.slice(0,余数); var after=numStr.slice(余数,3); var sep=“”; 如果(长度前){ sep=“.”; } 在+sep+之前+之后+getNumberName(num)返回; } 变量nums=[0,1,12,123,1234,12345,123456,1237567,12325678,123856789,123e7,125e8,123.6e9,123e10]; nums.forEach(函数(num){ 编写(num+“:$”+测试(num)+“
”);
});可能有更好的方法,但这会起作用:

函数getTextNums(编号){

if((数字/1000000)<1){
var n=number.toString();
var first3=n.子串(0,3);
console.log(前3+千);
}如果((数量/1000000000)<1,则为其他情况{
var n=number.toString();
var first3=n.子串(0,3);
console.log(前3+百万);
}如果((数字/10000000000)<1){
var n=number.toString();
var first3=n.子串(0,3);
console.log(前30+“十亿”);
}如果((数字/10000000000000)<1){
var n=number.toString();
var first3=n.子串(0,3);
console.log(前3+万亿);
}否则{
}
}


getTextNums(4533544433000)

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

// 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));
});
//用于整数
函数getNumberName(num){
var numNames=['','000','百万','十亿];
var num=num.toString()
var len=num.length-1;
var pow=numNames[len/3 | 0];
返回战俘;
}
//对于整数
函数编号(num,places){
地点=地点| | 0;
var len=num.toString().length-1;
var pow=len/3 | 0
返回(num<1000?num:num/Math.pow(10,pow*3)).toFixed(位置);
}
函数GetNumberAbr(num,places){
返回缩写数字(num,places)+''+getNumberName(num);
}
变量nums=[0,1,121231234412345123456123456712345678123456781234567889123E7]
nums.forEach(函数(num){
log(num+':'+getNumberAbbr(num,1));
});

上述内容并不完整。应该有一个限制,比如说超过1万亿,它将停止缩短数字。

您应该能够根据数字的数量确定名称,并且名称在一个数组中,例如
namesArray[Math.floor(num.length/3)]
// 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));
});