8

我正在使用 Intl.NumberFormat 将数字类型转换为 Angular2 中 typescript/javascript 中的格式化字符串。我想要一个本机解决方案,这是理想的,但我需要一个前导加号来包含正数。

如果Intl.NumberFormat无法做到这一点,我还能如何原生地做到这一点?

@Input() amount : number;

drawLabel() {
   var formatter = new Intl.NumberFormat("en-GB",
                                         {
                                            style: "decimal",
                                            minimumFractionDigits:1
                                         });
   ...

   this.label = formatter.format(this.amount)
}
4

4 回答 4

9

在 2019 年,你这样做:

var formatter = new Intl.NumberFormat("en-GB", { style: "decimal",  signDisplay: 'always' });

console.log(formatter.format(-100.123456));
// output -100.123
console.log(formatter.format(100.123456));
// output +100.123
console.log(formatter.format(0));
// output +0.

于 2019-11-21T12:25:34.863 回答
6

尝试这样的事情:

class FormatterWithSign extends Intl.NumberFormat {
  constructor(...args) {
    super(...args);
  }
  
  format(x) {
    var res = super.format(x);
    return x < 0 ? res : "+" + res;
  }
}

var formatter = new FormatterWithSign("en-GB", { style: "decimal", minimumFractionDigits:1 });

console.log(formatter.format(-100.123456));
console.log(formatter.format(100.123456));
console.log(formatter.format(0));

于 2017-02-07T10:05:45.930 回答
2

只需检查 this.amount 是否大于 0。如果是这种情况,请添加前导 +。

if(this.amount > 0) this.label = "+"+formatter.format(this.amount);
else this.label = formatter.format(this.amount);

更好的

this.label  = formatter.format(this.amount);
if(this.amount > 0) this.label = "+"+this.label;

或简而言之

 this.label = this.amount > 0 ? "+"+formatter.format(this.amount): formatter.format(this.amount)
于 2017-02-07T09:56:26.517 回答
0

您还可以添加自己的formatWithSign方法:

Intl.NumberFormat.prototype.formatWithSign = function(x) 
{
  let y = this.format(x);
  return x < 0 ? y : '+' + y;
}

const MyFormat = new Intl.NumberFormat('en-GB', { style: "decimal", minimumFractionDigits: 2, maximumFractionDigits:2} )


console.log(MyFormat.formatWithSign(-78.123456));     // -78,12 
console.log(MyFormat.formatWithSign(90.123456));     //  +90.12
console.log(MyFormat.formatWithSign(0));            //   +0.00

于 2019-09-04T21:05:24.367 回答