Angular2 或 TypeScript 左填充零字符串
Angular2 or TypeScript Left padding a String with Zeros
我有一个数字,比如 9。但我需要它作为字符串“09”。
我知道我可以编写自己的逻辑。但我正在寻找一个可以填充它的隐式 util 函数。
我在 TypeScript 中使用 angular2。寻找类似 this.
的内容
就像java
String.format("%010d", Integer.parseInt(mystring));
您可以为此创建自己的函数。要格式化数字,您必须先将其转换为字符串。
function pad(num, size) {
let s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
TypeScript
pad(num:number, size:number): string {
let s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
编辑: 有几种更好、更高效的方法可以做到这一点。
请参阅此答案中的讨论:(如果您有时间,我建议您阅读大部分提交的答案)
更新: ECMAScript 2017 现在支持字符串填充
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])
勾选https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
编辑: 正如其他人所提到的,因为 Angular 4 你可以使用如下
{{ myNumber | number:'2.0' }}
使用最新的 Typescript,您可以:
let myStr:string = padLeft('123', '0', 6); // '000123'
padLeft(text:string, padChar:string, size:number): string {
return (String(padChar).repeat(size) + text).substr( (size * -1), size) ;
}
自 Angular v4 以来,有了 DecimalPipe,我们可以轻松添加前导零:https://angular.io/api/common/DecimalPipe
在你的 html 中,你可以使用类似的东西:
{{ myNumber | number:'2.0' }}
public padIntegerLeftWithZeros(rawInteger: number, numberOfDigits: number): string {
let paddedInteger: string = rawInteger + '';
while (paddedInteger.length < numberOfDigits) {
paddedInteger = '0' + paddedInteger;
}
return paddedInteger;
}
public zeroPadIntegerLeft3Digits(rawInteger: number): string {
return this.padIntegerLeftWithZeros(rawInteger, 3);
}
您可以在 HTML
中使用以下模板之一
{{ ("00" + 9).slice(-2) }} // 09
或者
{{ 9 | number: '2.' }} // 09
或者在组件ts代码文件中
var x = ("00" + 9).slice(-2);
您可以为此创建一个管道
{{ID |LeftPadFilter: ID}}
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'LeftPadFilter',
pure: false
})
export class LeftPadFilter implements PipeTransform {
transform(item: string): string {
return (String('0').repeat(2) + item).substr((2 * -1), 2);
}
}
如果我想在开头填充 "0" 并且希望字符串 str 的长度为 9:
str.padStart(9 ,"0")
我有一个数字,比如 9。但我需要它作为字符串“09”。
我知道我可以编写自己的逻辑。但我正在寻找一个可以填充它的隐式 util 函数。
我在 TypeScript 中使用 angular2。寻找类似 this.
的内容就像java
String.format("%010d", Integer.parseInt(mystring));
您可以为此创建自己的函数。要格式化数字,您必须先将其转换为字符串。
function pad(num, size) {
let s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
TypeScript
pad(num:number, size:number): string {
let s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
编辑: 有几种更好、更高效的方法可以做到这一点。 请参阅此答案中的讨论:(如果您有时间,我建议您阅读大部分提交的答案)
更新: ECMAScript 2017 现在支持字符串填充
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])
勾选https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
编辑: 正如其他人所提到的,因为 Angular 4 你可以使用如下
{{ myNumber | number:'2.0' }}
使用最新的 Typescript,您可以:
let myStr:string = padLeft('123', '0', 6); // '000123'
padLeft(text:string, padChar:string, size:number): string {
return (String(padChar).repeat(size) + text).substr( (size * -1), size) ;
}
自 Angular v4 以来,有了 DecimalPipe,我们可以轻松添加前导零:https://angular.io/api/common/DecimalPipe
在你的 html 中,你可以使用类似的东西:
{{ myNumber | number:'2.0' }}
public padIntegerLeftWithZeros(rawInteger: number, numberOfDigits: number): string {
let paddedInteger: string = rawInteger + '';
while (paddedInteger.length < numberOfDigits) {
paddedInteger = '0' + paddedInteger;
}
return paddedInteger;
}
public zeroPadIntegerLeft3Digits(rawInteger: number): string {
return this.padIntegerLeftWithZeros(rawInteger, 3);
}
您可以在 HTML
中使用以下模板之一{{ ("00" + 9).slice(-2) }} // 09
或者
{{ 9 | number: '2.' }} // 09
或者在组件ts代码文件中
var x = ("00" + 9).slice(-2);
您可以为此创建一个管道
{{ID |LeftPadFilter: ID}}
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'LeftPadFilter',
pure: false
})
export class LeftPadFilter implements PipeTransform {
transform(item: string): string {
return (String('0').repeat(2) + item).substr((2 * -1), 2);
}
}
如果我想在开头填充 "0" 并且希望字符串 str 的长度为 9:
str.padStart(9 ,"0")