Как добавить запятые без округления десятичных знаков в угловой 4-трубке?

Привет, как добавить запятые без округления десятичных знаков?

пример:

const data = 1000.789343;
const data = 1000.786;

вывод должен быть

1,000.789343
1,000.786

Я пробовал несколько решений:

new DecimalPipe(data, '2.')

Но ничего из этого не сработало. Он будет продолжать округлять десятичные точки. Помощь очень ценится.

data.ToLocaleString(), если это не сработает, вам необходимо указать его, поскольку ваша страна не использует этот формат.
Pavlo 10.08.2018 17:12

@ T.J.Crowder см. Обновленный вопрос.

rj.learn 10.08.2018 17:18

@ rj.learn, хотите ли вы использовать формат Intl

Amit 10.08.2018 17:20

извините data.toLocaleString(undefined, {maximumSignificantDigits : 21}), я не обратил внимание на более длинные десятичные знаки

Pavlo 10.08.2018 17:22
0
4
787
3

Ответы 3

Попробуйте использовать десятичный канал Usng для углового числа, например: {{ yourData | number:'.3-3'}}, после указания значений после ".". Не округляет значения

{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.

minIntegerDigits: The minimum number of integer digits before the decimal point. Default is 1. minFractionDigits: The minimum number of digits after the decimal point. Default is 0. maxFractionDigits: The maximum number of digits after the decimal point. Default is 3.

Пожалуйста, посетите угловую документацию "Десятичная трубка"

Я считать там прячется правильный ответ. Вы бы просто дали действительно большое значение (не 3, как в вашем примере) для maxFractionDigits, верно?

T.J. Crowder 10.08.2018 17:27

Да, это был просто пример ... вы можете изменить его соответствующим образом

Danish Arora 10.08.2018 17:49

Разве не имеет смысла привести пример, работающий с примерными значениями OP?

T.J. Crowder 10.08.2018 17:59

Я бы предпочел использовать для этого собственный код.

var test = 24682476824.7868756;
var formatedval  = test.toString().split('.')[0].split(/(?=(?:\d{3})+(?:\.|$))/g).join(",") + '.' + test.toString().split('.')[1];
console.log(formatedval)

Выход: 24,682,476,824,786877

Как это относится к трубе Angular 4?

T.J. Crowder 10.08.2018 17:26

@ T.J.Crowder Нам нужно будет создать собственный канал для того же

Amit 10.08.2018 17:27

Кажется, этого не хватает в ответе. Кроме того, возможно, лучше просто использовать предопределенный.

T.J. Crowder 10.08.2018 17:32

Не уверен, есть ли у angular предопределенный канал для функциональности. В последнем выпуске angular удалил все предопределенные каналы, если я не ошибаюсь

Amit 10.08.2018 17:34

DecimalPipe, как ответила датчанка Арора, указан в текущих документах: angular.io/api/common/DecimalPipe

T.J. Crowder 10.08.2018 17:38

@ T.J. Crowder О, это здорово

Amit 10.08.2018 17:43

Вы можете создать свою собственную трубу

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'keepDecimals'})
export class ExponentialStrengthPipe implements PipeTransform {
  transform(value: number, keepDecimals: boolean): string {
    const options = keepDecimals ? {maximumSignificantDigits : 21} : {};
    return value.toLocaleString(undefined, options);
  }
}

<p>{{1000.789343 | keepDecimals: true}}</p>

Почему? Что не так с DecimalPipe (Ответ Датской Ароры)?

T.J. Crowder 10.08.2018 17:46

Я только что понял, как работает DecimalPipe. Это может быть альтернатива без указания max-min

Pavlo 10.08.2018 17:50

Другие вопросы по теме