Reputation: 563
I'd like to achieve number formatting such that if the number is round there should be no decimal placeholders .00
and otherwise use 2 and only 2 decimal places. For example:
1.23 -> 1.23
1.23456 -> 1.24
1.2 -> 1.20
1.0 -> 1
1 -> 1
According to the docs, you can only specify range of decimal places (e.g. |number:'.0-2'
) and not specific choice (e.g. |number:'.0,2'
); am i right or is there a way?
I'm aware I could achieve the same with some *ngIf
-s but would like to avoid if possible.
Upvotes: 8
Views: 26228
Reputation: 1
For reference.. It should be {{x | number:'1.0-2'}}. This displays 0, 1 or 2 decimals depending if whole number.
Upvotes: -2
Reputation: 3813
You could create your own DecimalPipe like this:
@Pipe({ name: 'number' })
export class MyCurrencyPipe implements PipeTransform {
constructor(
private decimalPipe : DecimalPipe,
) {
}
transform(value: any, digitsInfo?: string, locale?: string): string | null {
let result;
result = this.decimalPipe.transform(value, digitsInfo, locale);
// …do something with your result
return result;
}
}
If your have this your could
removeTrailingZeros? : boolean
to the transform() method. or
digitsInfo
like '1.0,2'
And don’t forget to add MyDecimalPipe
to the providers of your Module to make sure your templates use MyDecimalPipe
instead of angulars DecimalPipe
when writing {{ foo | number:'1.0,2' }}
.
Upvotes: 0
Reputation: 177
If you want to do more than one thing on your variable, the best practise is to create two diffrent pipes and use them together. Important is order from left to right. If you want to display only two digits you can use built-in pipes like deicmalPipe:
Angular Doc Or just check that topic: Stack overflow answer
If you want to display 1 not 1.00 you can create your custom pipe where it check if that characters are 00 or sth else. If it is 00 it return number without these digits.
Upvotes: 5
Reputation: 157
For displaying 1 instead of 1.0 you can try this.
{{x | number:'1.0-0'}}
Upvotes: -2