如何在JavaScript中使用数百万和数千?

时间:2012-10-15 16:53:34

标签: javascript jquery rounding number-formatting shorthand

我正在尝试舍入大数字。例如,如果我有这个号码:

12,645,982

我想对这个数字进行舍入并将其显示为:

13 mil

或者,如果我有这个号码:

1,345

我想围绕它并将其显示为:

1 thousand

如何在JavaScript或jQuery中执行此操作?

8 个答案:

答案 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.lengthswitch案例

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))