如何将带逗号的数字转换为 Angular 中的数字
How to convert number with comma to number in Angular
我正在测试我的自定义管道:NoCommaPipe。但是当我创建一个输入为 10,000,000 的测试时,它 returns NaN。我如何创建一个测试,输入如下:10,000,000
没有-comma.pipe.ts:
import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
name: 'noComma'
})
export class NoCommaPipe implements PipeTransform {
transform(val: number): string {
let transformedVal: string;
if(val === undefined || val === null) {
transformedVal = ""
} else {
transformedVal = val.toString().replace(/,/g, "");
}
return transformedVal;
}
}
无-comma.pipe.spec.ts:
import { NoCommaPipe } from './no-comma.pipe';
fdescribe('NoCommaPipe', () => {
let noCommaPipe: NoCommaPipe;
beforeEach(() => {
noCommaPipe = new NoCommaPipe();
})
it('should create', () => {
expect(noCommaPipe).toBeTruthy();
})
it('should return empty string on input is undefined', () => {
expect(noCommaPipe.transform(undefined)).toEqual('');
})
it('should return empty string on input is null', () => {
expect(noCommaPipe.transform(null)).toEqual('');
})
it('should return 10000000 on input equal to 10,000,000', () => {
expect(noCommaPipe.transform(Number('10,000,000'))).toEqual('10000000');
})
})
它 returns NaN 因为这是您作为参数提供给您的方法的内容:
console.log(Number('10,000,000'));
你可以在这里看到,如果你不使用 Number()
它会按预期工作。
function transform(val) {
let transformedVal;
if (val === undefined || val === null) {
transformedVal = ""
} else {
transformedVal = val.toString().replace(/,/g, "");
}
return transformedVal;
}
console.log(transform(Number('10,000,000')));
console.log(transform('10,000,000'));
回应评论...
console.log(typeof('10,000,000'));
console.log(typeof(10000000));
console.log(10,000,000);
您即将通过考试
Number('10,000,000')
它总是 return NaN,因为 10,000,000 不是数字,而是字符串。
没有理由在你的指令中将你的转换属性作为数字传递,因为你收到的值将始终是字符串...
只需将 val: number
更改为 val: string
或 any
并将您的强制转换为 Number
我正在测试我的自定义管道:NoCommaPipe。但是当我创建一个输入为 10,000,000 的测试时,它 returns NaN。我如何创建一个测试,输入如下:10,000,000
没有-comma.pipe.ts:
import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
name: 'noComma'
})
export class NoCommaPipe implements PipeTransform {
transform(val: number): string {
let transformedVal: string;
if(val === undefined || val === null) {
transformedVal = ""
} else {
transformedVal = val.toString().replace(/,/g, "");
}
return transformedVal;
}
}
无-comma.pipe.spec.ts:
import { NoCommaPipe } from './no-comma.pipe';
fdescribe('NoCommaPipe', () => {
let noCommaPipe: NoCommaPipe;
beforeEach(() => {
noCommaPipe = new NoCommaPipe();
})
it('should create', () => {
expect(noCommaPipe).toBeTruthy();
})
it('should return empty string on input is undefined', () => {
expect(noCommaPipe.transform(undefined)).toEqual('');
})
it('should return empty string on input is null', () => {
expect(noCommaPipe.transform(null)).toEqual('');
})
it('should return 10000000 on input equal to 10,000,000', () => {
expect(noCommaPipe.transform(Number('10,000,000'))).toEqual('10000000');
})
})
它 returns NaN 因为这是您作为参数提供给您的方法的内容:
console.log(Number('10,000,000'));
你可以在这里看到,如果你不使用 Number()
它会按预期工作。
function transform(val) {
let transformedVal;
if (val === undefined || val === null) {
transformedVal = ""
} else {
transformedVal = val.toString().replace(/,/g, "");
}
return transformedVal;
}
console.log(transform(Number('10,000,000')));
console.log(transform('10,000,000'));
回应评论...
console.log(typeof('10,000,000'));
console.log(typeof(10000000));
console.log(10,000,000);
您即将通过考试
Number('10,000,000')
它总是 return NaN,因为 10,000,000 不是数字,而是字符串。 没有理由在你的指令中将你的转换属性作为数字传递,因为你收到的值将始终是字符串...
只需将 val: number
更改为 val: string
或 any
并将您的强制转换为 Number