2015-04-14 28 views
1

使用Javascript,我想格式化數字以始終顯示3位數字,以及它的正確標識符(例如:Million,Thousand)。如果在100,000以下,該數字應該只顯示「千位」數字總是顯示帶有3位數字和描述符的數字

所有數字都將爲大於零的整數,最高數字將爲數萬億。

的幾個例子就是我在尋找:

  • 1千
  • 13千
  • 627千
  • 285萬
  • 6790萬
  • 1.53億
  • 9.52億
  • etc ...

我試過的所有解決方案都變成了意大利麪條代碼,我希望有人能夠找到一個乾淨,智能的解決方案。

編輯:

我結束了使用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/>"); 
 
});

+0

您應該能夠根據位數確定名稱,並且名稱位於數組中,例如, 'namesArray [Math.floor(num.length/3)]'。 。 – RobG

回答

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

有可能是一個更好的辦法,但是這將工作:

功能getTextNums(數量){

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)