如何将带逗号的数字转换为 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: stringany 并将您的强制转换为 Number