繁体   English   中英

JavaScript; 三位数后如何设置点?

[英]JavaScript; How to set dot after three digits?

我有以下JavaScript代码:

var calculation = $('select[name=somevalue1] option:selected').data('calc')-($('select[name=somevalue1] option:selected').data('calc')/100*$('select[name=somevalue2] option:selected').data('calc'))-($('select[name=somevalue1] option:selected').data('calc')-($('select[name=somevalue1] option:selected').data('calc')/100*$('select[name=somevalue2] option:selected').data('calc')))/100*$('select[name=somevalue3] option:selected').data('calc');

$('#calculation').text((calculation).toFixed(2).replace(".",","))

那将计算出一个数字,改变. ,并在逗号后将其四舍五入到两位数。

我需要做的是在树的数字后添加一个点。

手段:

1.234,56代替1234,56

1.234.567,89而非1234567,89

有人知道这样做的方法吗?

您应该使用一个额外的String#replace使用正则表达式(匹配之前的三个人一组数字, )和替换功能(前置.以每场比赛)。

您更新的代码:

var calculation = $('select[name=somevalue1] option:selected').data('calc') - ($('select[name=somevalue1] option:selected').data('calc') / 100 * $('select[name=somevalue2] option:selected').data('calc')) - ($('select[name=somevalue1] option:selected').data('calc') - ($('select[name=somevalue1] option:selected').data('calc') / 100 * $('select[name=somevalue2] option:selected').data('calc'))) / 100 * $('select[name=somevalue3] option:selected').data('calc')

function format(n) {
  return n.toFixed(2).replace('.', ',').replace(/\d{3}(?=(\d{3})*,)/g, function(s) {
    return '.' + s
  })
}

$('#calculation').text(format(calculation))


演示实施:

 var calculations = [ 1234.56, 1234567.89, 1234, .12 ] function format (n) { return n.toFixed(2).replace('.', ',').replace(/\\d{3}(?=(\\d{3})*,)/g, function (s) { return '.' + s }) } console.log(calculations.map(format)) 

ECMAScript国际化API具有数字格式功能。 Intl.NumberFormat()

您可以使用纯javascript这样使用它:

 var calculation = document.getElementById('money').value; //1st way var moneyFormatter = new Intl.NumberFormat(); document.getElementById('formattedMoney').innerText = moneyFormatter.format(calculation); // 2nd way, using currency var moneyFormatter2 = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 2 }); document.getElementById('formattedMoney2').innerText = moneyFormatter2.format(calculation); 
 <label>Calculation:</label> <input type="text" value="123456789.25" name="money" id="money" /> <ul> <li>Number Format: <b><span id="formattedMoney"></span></b><br/><br/></li> <li>Currency Format: <b><span id="formattedMoney2"></span><b/></li> </ul> 

IE11,Firefox和Chrome支持它,但是我不确定其他浏览器。

http://www.ecma-international.org/ecma-402/1.0/#sec-11.1.2

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

在现代浏览器(Chrome 24 +,Firefox 29 +,IE11)上,您可以使用Number.prototype.toLocaleString()

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

var number = 3500.12;
console.log(number.toLocaleString());

这使用浏览器的区域设置来自动设置数字格式。 我的浏览器设置为德语,因此输出为

3.500,12

如果使用其他区域设置的人使用您的网站,他们将按预期看到这些数字。

该功能将为您工作:

function formatNumber(num) {
  var first = num.split(',');
  var digits = first[0].split('').reverse();
  var new_digits = [];
  for(var i =0; i<digits.length; i++) {
    if((i+1)%3==0) {
      new_digits.push(digits[i]);
      new_digits.push('.');
    }
    else {
      new_digits.push(digits[i]);
    }
  }
  var new_num = new_digits.reverse().join("")+','+first[1];
  return new_num;
}

这段代码对我有用:

<p id="calculation"></p>

<script>
    function numberWithCommas(x) {
        var parts = x.toString().split(".");
        parts[0]=parts[0].replace(/\B(?=(\d{3})+(?!\d))/g,".");
        return parts.join(",");
        }

        var calculation = 1231739216.34367;

        document.getElementById("calculation").innerHTML = numberWithCommas((calculation).toFixed(2))
</script>

该代码将:

  1. 小数点后(业务)四舍五入到两位数。
  2. 将小数点更改为逗号。
  3. 在小数点前每三位数设置一个点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM