我正在尝试舍入大数字。例如,如果我有这个号码:
12,645,982
我想对这个数字进行舍入并将其显示为:
13 mil
或者,如果我有这个号码:
1,345
我想围绕它并将其显示为:
1 thousand
如何在JavaScript或jQuery中执行此操作?
答案 0 :(得分:16)
这是一个用于格式化数千,数百万和数十亿的实用程序功能:
function MoneyFormat(labelValue)
{
// Nine Zeroes for Billions
return Math.abs(Number(labelValue)) >= 1.0e+9
? Math.abs(Number(labelValue)) / 1.0e+9 + "B"
// Six Zeroes for Millions
: Math.abs(Number(labelValue)) >= 1.0e+6
? Math.abs(Number(labelValue)) / 1.0e+6 + "M"
// Three Zeroes for Thousands
: Math.abs(Number(labelValue)) >= 1.0e+3
? Math.abs(Number(labelValue)) / 1.0e+3 + "K"
: Math.abs(Number(labelValue));
}
用法:
var foo = MoneyFormat(1355);
//Reformat result to one decimal place
console.log(parseFloat(foo).toPrecision(2) + foo.replace(/[^B|M|K]/g,""))
<强>参考强>
答案 1 :(得分:5)
var lazyround = function (num) {
var parts = num.split(",");
return parts.length > 1 ? (Math.round(parseInt(parts.join(""), 10) / Math.pow(1000, parts.length-1)) + " " + ["thousand", "million", "billion"][parts.length-2]) : parts[0];
};
alert(lazyround("9,012,345,678"));
alert(lazyround("12,345,678"));
alert(lazyround("345,678"));
alert(lazyround("678"));
它输出:
9 billion
12 million
346 thousand
678
玩得开心。这很好,因为我没有看到你自己做了什么,这是混淆的。
你在jsfiddle中有一个工作示例:jsfiddle.net/p8pfB/
答案 2 :(得分:5)
Numeral JS ..如果有人检查出来,请检查数字Js。你只需要包含脚本,然后只包含一行代码
numeral(yourNumber).format('0.0a')
答案 3 :(得分:1)
var number = 1345;
var zeroCount = 3;
var roundedNumber = Math.round( number / Math.pow(10,zeroCount) )
只需将zeroCount调整为3为数千,将6调整为数百万,等等。我假设您可以使用if语句,只需要一些数学函数的帮助。
答案 4 :(得分:1)
@Paul的答案很棒,但它给出了773.282600918 M等。
我们可能不希望它用于大数字。 使用Math.round()
修复function moolah_round(num,locale='en') {
// Nine Zeroes for Billions
return Math.abs(Number(num)) >= 1.0e+9
? Math.round(Math.abs(Number(num)) / 1.0e+9 ) + " B"
// Six Zeroes for Millions
: Math.abs(Number(num)) >= 1.0e+6
? Math.round(Math.abs(Number(num)) / 1.0e+6 ) + " M"
// Three Zeroes for Thousands
: Math.abs(Number(num)) >= 1.0e+3
? Math.round(Math.abs(Number(num)) / 1.0e+3 ) + " K"
: Math.abs(Number(num));
}
答案 5 :(得分:1)
Paul Sweatte的回答很好
迪帕克·托马斯的答案很好
我的答案是更加灵活/可定制且更易于阅读的方式,所以去了:
代码
function NumbFormat(options) {
let number = Math.abs(Number(options.number));
// Nine zeros for Billions
if (Number(number) >= 1.0e+9) {
return (number / 1.0e+9).toFixed(options.billion.decimal) + ` ${options.billion.unit}`;
}
// Six zeros for Millions
if (Number(number) >= 1.0e+6) {
return (number / 1.0e+6).toFixed(options.million.decimal) + ` ${options.million.unit}`;
}
// Thrhee zeros for Thousands
if (Number(number) >= 1.0e+3) {
return (number / 1.0e+3).toFixed(options.thousand.decimal) + ` ${options.thousand.unit}`;
}
return number;
}
console.log(NumbFormat({
'number': 100000000,
'billion': {
'decimal': 1,
'unit': 'B',
},
'million': {
'decimal': 1,
'unit': 'M',
},
'thousand': {
'decimal': 1,
'unit': 'K',
},
}));
console.log(NumbFormat({
'number': 100000000,
'billion': {
'decimal': 1,
'unit': 'B',
},
'million': {
'decimal': 1,
'unit': 'Million',
},
'thousand': {
'decimal': 1,
'unit': 'K',
},
}));
console.log(NumbFormat({
'number': 100000000,
'billion': {
'decimal': 1,
'unit': 'B',
},
'million': {
'decimal': 0,
'unit': 'Million',
},
'thousand': {
'decimal': 1,
'unit': 'K',
},
}));
console.log(NumbFormat({
'number': 100000000,
'billion': {
'decimal': 1,
'unit': 'B',
},
'million': {
'decimal': 0,
'unit': 'M',
},
'thousand': {
'decimal': 1,
'unit': 'K',
},
}));
使用上述代码,您可以控制数十亿,数百万或数千个小数,还可以控制要显示的单位:)
答案 6 :(得分:0)
使用str.length
和switch
案例
var number=12345;
类似这样的事情
switch (number.length) {
case 4:
alert(number/10000+"Thousand");
break;
}
答案 7 :(得分:0)
这是对 Deepak Thomas 的回答的改进。
它在必要时处理小数,并提供更多的可读性和对函数的控制。
运行代码片段以查看显示其用法的 5 个警报实时演示。
function numRound(num) {
num = Math.abs(Number(num))
const billions = num/1.0e+9
const millions = num/1.0e+6
const thousands = num/1.0e+3
return num >= 1.0e+9 && billions >= 100 ? Math.round(billions) + "B"
: num >= 1.0e+9 && billions >= 10 ? billions.toFixed(1) + "B"
: num >= 1.0e+9 ? billions.toFixed(2) + "B"
: num >= 1.0e+6 && millions >= 100 ? Math.round(millions) + "M"
: num >= 1.0e+6 && millions >= 10 ? millions.toFixed(1) + "M"
: num >= 1.0e+6 ? millions.toFixed(2) + "M"
: num >= 1.0e+3 && thousands >= 100 ? Math.round(thousands) + "K"
: num >= 1.0e+3 && thousands >= 10 ? thousands.toFixed(1) + "K"
: num >= 1.0e+3 ? thousands.toFixed(2) + "K"
: num.toFixed()
}
alert(numRound(1234))
alert(numRound(23456))
alert(numRound(345678))
alert(numRound(4567890))
alert(numRound(56789012))