JavaScript 将数字转换为给定格式

6

我可以帮您将以下关于IT技术的内容进行翻译,并使之更加通俗易懂:

我需要实现JavaScript数字格式化,要求如下:

我需要一个函数,它有两个参数:

var number = 1000;
var format = #,###.0; //or #,### ; 

function ConvertNumber(number, format){   
    // this function need to return 1,000.0 if format is #,###.0
    // this function need to return 1,000 if format is #,### 
}

有没有人拥有这种功能? 非常感谢你的帮助,谢谢。


你的函数“ConvertNumber”应该做什么? - polin
@polin,那就是我想要的。 - Rohan Patil
@Alex 的链接是关于 Java 函数的,但我无法理解。 - Rohan Patil
你想要什么作为10000000的回报...是10,000,000还是10000,000...? - Naz
mredkj.com/javascript/nfbasic.html 我找到了这个,但是运气不太好。 - Rohan Patil
显示剩余3条评论
3个回答

3
你可以使用JQuery的NumberFormatter插件。
以下是如何使用此插件的示例。
$("#salary").blur(function(){
    $(this).format({format:"#,###.00", locale:"de"});
});

不同的地区有不同的格式,使用适合您需求的语言环境,最常用的是英语环境 en - elclanrs
从文档中得知:在不同的国家,我们会将一个数字写成不同的格式。例如,在美国我们会写成“1,250,500.75”,而在德国则是“1.250.500,75”,在法国则是“1 250 500,75”,在瑞士则是“1'250'500.75”,在日本则是“125,0500.75”。这个数字完全相同,只是在呈现给网络应用程序的用户时使用了不同的格式。 - Frank
不建议使用区域设置,因为您不知道用户是否可以访问区域设置或理解它们,或者他们是否习惯于使用的浏览器以其“本地”格式呈现数字。最好使用您理解的格式,并向用户解释或明确无歧义。 - RobG
是的,@BlackCobra,我也认为需要一些jQuery或Javascript函数来实现这个。 - Rohan Patil
我得到了这个,但运气不太好。 - Rohan Patil

1

试试这个:

function ConvertNumber(number, decimals, dec_point, thousands_sep) {

  // Strip all characters but numerical ones.
  number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
  var n = !isFinite(+number) ? 0 : +number,
    prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
    sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
    dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
    s = '',
    toFixedFix = function (n, prec) {
      var k = Math.pow(10, prec);
      return '' + Math.round(n * k) / k;
    };

  // Fix for IE parseFloat(0.55).toFixed(0) = 0;
  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
  if (s[0].length > 3) {
    s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
  }
  if ((s[1] || '').length < prec) {
    s[1] = s[1] || '';
    s[1] += new Array(prec - s[1].length + 1).join('0');
  }
  return s.join(dec);
}​

例子:

example 1: ConvertNumber(1234.5678, 2, '.', ',');
returns 1: '1,234.57'

example 2: ConvertNumber(1000);
returns 2: '1,000'

example 3: ConvertNumber(1000.55, 1);
returns 3: '1,000.6'

example 4: ConvertNumber(67000, 5, ',', '.');
returns 4: '67.000,00000'

example 5: ConvertNumber('1.20', 4);
returns 5: '1.2000'

感谢@Palash Mondal提供这个。 - Rohan Patil

1

检查这个函数...

var number = 1000; // int or float or string
var format = '#,###.0'; // you can put any format that you want... only string

function ConvertNumber(number, format){
    var tail=format.lastIndexOf('.');number=number.toString();
    tail=tail>-1?format.substr(tail):'';
    if(tail.length>0){if(tail.charAt(1)=='#'){
        tail=number.substr(number.lastIndexOf('.'),tail.length);
    }}
    number=number.replace(/\..*|[^0-9]/g,'').split('');
    format=format.replace(/\..*/g,'').split('');
    for(var i=format.length-1;i>-1;i--){
        if(format[i]=='#'){format[i]=number.pop()}
    }
    return number.join('')+format.join('')+tail;
}

// Examples
// ConvertNumber(1234,'#,###') === 1,234
// ConvertNumber(1234,'#,###.00') === 1,234.00
// ConvertNumber(1234,',###.00') === 1,234.00
// ConvertNumber(1234.4575,',###.##') === 1,234.45
// ConvertNumber(1234567890.4575,',###,###,###.##') === 1,234,567,890.45
// ConvertNumber(123.4575,',#,#.##') === 1,2,3.45
// ConvertNumber(123456.4575,'-#-#.##') === 1234-5-6.45
// ConvertNumber(1234567.4575,' ## ###.##') === 12 34 567.45

希望这个功能对你和那些有同样问题的人非常有帮助...祝你好运...

如果数字小于1000或大于9999,则可以使用此函数进行正常的数字格式化,例如:将100000转换为1,00,000等。非常感谢,这真的很可接受。 - Rohan Patil
请帮我更新这个函数...亲爱的,我不知道你们国家的正常格式是什么...请按照你们的正常格式格式化"1 000 000 000 000 000.000 000"。 - Naz
这个函数可以进行普通格式化,但首先您必须向我展示一个普通格式化的长数字示例。然后,在更新函数后,如果您没有提到任何“格式”,则该“数字”将按照普通格式进行格式化。 - Naz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接