Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用模式设置数值格式?_Javascript - Fatal编程技术网

Javascript 如何使用模式设置数值格式?

Javascript 如何使用模式设置数值格式?,javascript,Javascript,我在JavaScript中找到了一个等价的。我想用给定的十进制模式格式化给定的数值,如 "#,###.00" "###.##" "#,###.##" "$#,##0.00" "###,###.00" "$###,###.00" "###,###.###" "####,####.000" 有什么办法可以做到吗?注意:我打字速度很快,请原谅我的错误,也许还有更好的办法 如果不想依赖库,可以执行以下操作: var number = 100000.00000000000012422; functio

我在JavaScript中找到了一个等价的。我想用给定的十进制模式格式化给定的数值,如

"#,###.00"
"###.##"
"#,###.##"
"$#,##0.00"
"###,###.00"
"$###,###.00"
"###,###.###"
"####,####.000"

有什么办法可以做到吗?

注意:我打字速度很快,请原谅我的错误,也许还有更好的办法

如果不想依赖库,可以执行以下操作:

var number = 100000.00000000000012422;

function FormatNumber(no){

  no = no.toFixed(2);
  no = no.toString().split('.');

  var p1 = no[0];

  p1 = p1.substring(0, p1.length - 3) + ',' + p1.substring(p1.length - 3);

  no = p1 + '.' + no[1];

  console.log(no);

}

FormatNumber(number);
  no = no.toFixed(2);
  no = no.toString().split('.');

  var p1 = no[0];

  var arr = [];

  arr = p1.split("").reverse().join("").match(/[\s\S]{1,3}/g) || [];
  arr = arr.reverse();

  p1 = "";

  for(var i = 0; i < arr.length; i++){
    p1 += arr[i].split("").reverse().join("");
        if(i != arr.length - 1){
           p1 += ',';
        }
  }


  no = p1 + '.' + no[1];
FormatNumber
函数将一个数字作为参数(您可能希望将其扩展为包含小数点等)。它将数字转换为所需的小数位数,然后将其转换为字符串,并用小数分隔符“
”将其拆分

下一步是从后面添加三个字符的分隔符,然后只需将其余字符重新连接在一起即可

如果您想每3个字符获得一个“
”,您可以编写一个更“复杂”的格式化程序,如下所示:

var number = 100000.00000000000012422;

function FormatNumber(no){

  no = no.toFixed(2);
  no = no.toString().split('.');

  var p1 = no[0];

  p1 = p1.substring(0, p1.length - 3) + ',' + p1.substring(p1.length - 3);

  no = p1 + '.' + no[1];

  console.log(no);

}

FormatNumber(number);
  no = no.toFixed(2);
  no = no.toString().split('.');

  var p1 = no[0];

  var arr = [];

  arr = p1.split("").reverse().join("").match(/[\s\S]{1,3}/g) || [];
  arr = arr.reverse();

  p1 = "";

  for(var i = 0; i < arr.length; i++){
    p1 += arr[i].split("").reverse().join("");
        if(i != arr.length - 1){
           p1 += ',';
        }
  }


  no = p1 + '.' + no[1];
no=no.toFixed(2);
否=否.toString().split('.');
变量p1=否[0];
var-arr=[];
arr=p1.split(“”.reverse().join(“”).match(/[\s\s]{1,3}/g)| |[];
arr=arr.reverse();
p1=“”;
对于(变量i=0;i
此方法按每个数字将数字拆分为一个数组,反转数组,因为我们需要从字符串的末尾开始以获得准确的结果

然后,我们通过再次将数字拆分为一个数组,将其反转并重新连接在一起,然后附加到
p1
来迭代具有3个或更少值的字符串数组。如果是最后一项,则不会添加逗号

最后,我们取小数并附加到构建的字符串中

第1部分-格式 我建议使用javascript本机支持的Intl.NumberFormat,尽管旧浏览器可能不支持它。看起来IE11有,但安卓没有

所以,如果你想支持美元,你只需要使用这样的东西

var dollarFormat = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
var amountInDollars = dollarFormat.format(123456.123);
// amountInDollars = "$123,456.12"
但这对你来说也是一个例子

var roundedDollars = dollarFormat.format(555.555);
// roundedDollars = "$555.56";
对于数字案例,只需使用不同的格式化程序。默认的
'en-US'
在小数之前添加逗号、小数,并限制为3个小数。但这是可配置的

var numberFormat = new Intl.NumberFormat('en-US');
var formatted = numberFormat.format(123456.123456);
// formatted = "123,456.123"
var numberFormat2decimals = new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 });
var formatted2 = numberFormat2decimals.format(123456.123456);
// formatted2 = "123,456.12"
您可以设置分数、整数和有效数字的最大值和最小值,这也支持国际格式。由于它是原生javascript,我认为如果您的平台支持它,那么这是一种很好的方法

MDN是一个很好的参考:

第2部分-0 要在格式中实现0,必须在传递到格式化程序之前修改该值。如果您需要最小分数金额,则可以执行
.00
之类的操作,默认情况下,货币格式化程序将执行该操作。如果你有不想要的分形数,只需使用
Math.trun()
截断这些值

var num = Math.trun(1234.1234);
// num = 1234
现在要将类似于
12345
的内容更改为
12340
,我们必须删除一些数值。我们可以通过转换为字符串、提取最后一个字符并转换回原来的字符来了解更多信息

var num = 123456.12345;
var wholeNum = Math.trunc(num);
// wholeNum = 123456;
var toRemove = Number.parseInt(wholeNum.toString().slice(-1), 10);
// toRemove = 6
// slice(-1) gives us the right-most character of a string.
// Notice the ', 10' at the end, this is important to indicate which number base to use for parseInt. 
var wholeNumEnding0 = wholeNum - toRemove;
// wholeNumEnding0 = 123450

希望这就是你想要实现的目标?我没有在这里执行任何舍入。

jquery mask可能会帮助您。非常感谢。非常好的点,开始创建与之等效的byself。我没有发现任何插件满足
#
0
子模式的要求还没有。你能详细说明一下你想用
0
做什么吗?我假设
#
是传递到格式化程序的数值,
0
在输出中的某个位置强制使用0。我对Java的DecimalFormat不太熟悉。。如果我有时间,我会查一查,以便更好地了解你想要完成的任务。我也是,我急需这个。所以我在服务器端制作了一个webservice方法来处理。这只是一个热修复,以满足当前的需要,并没有在紧急情况下的错误内容。但是我希望我可以尝试用JQuery或JavaScript在客户端本身实现。顺便说一句,我认为这不是Java的。Microsoft Excel也在货币或十进制格式中使用这些模式。还有JasperSoft工作室。我认为这些模式有一些标准。啊,我明白了。所以我完全搞砸了我认为0是用来做什么的。。我的回答不接受你提出的模式。我相信它可以解决您的需求,但用它来直接支持这些模式可能是一项重要的工作。