3

В AngularJS как вывести число с плавающей запятой на HTML-страницу без потери точности и без ненужного заполнения с помощью 0?Форматирование чисел с плавающей запятой без потери точности в AngularJS

Я рассмотрел «номер» нг-фильтр (https://docs.angularjs.org/api/ng/filter/number), но параметр fractionSize вызывает фиксированное число знаков после запятой:

{{ number_expression | number : fractionSize}} 

Я ищу то, что в различных других языках называются «точная воспроизводимость», «каноническое представление строки», «переиздание», «туда и обратно» и т. д., но я не смог найти ничего подобного для AngularJS.

Например:

  • 1 => "1"
  • 1,2 => "1,2"
  • 1,23456789 => "1,23456789"
+0

Можете ли вы дать несколько примеров ввода и вывода числовых значений? –

ответ

2

я наткнулся на очевидное решение сам! Полностью удалить использование ng-фильтра «number» заставит AngularJS просто преобразовать выражение в строку в соответствии с моими требованиями.

Так

{{ number_expression }} 

вместо

{{ number_expression | number : fractionSize}} 
0

Вы можете захватить часть без закрывающего нули и использовать это в регулярном выражении. Предположительно, вы хотите сохранить один конечный ноль (например, «78.0»), чтобы он был аккуратным, а не заканчивался десятичным разделителем (например, «78.»).

var s = "12304.56780000"; 
// N.B. Check the decimal separator 
var re = new RegExp("([0-9]+\.[0-9]+?)(0*)$"); 
var t = s.replace(re, '$1'); // t = "12304.5678" 
t="12304.00".replace(re, "$1"); // t="12304.0" 

Объяснение от regex101:

/([0-9]+\.[0-9]+?)(0*)$/ 
    1st Capturing group ([0-9]+\.[0-9]+?) 
     [0-9]+ match a single character present in the list below 
      Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
      0-9 a single character in the range between 0 and 9 
     \. matches the character . literally 
     [0-9]+? match a single character present in the list below 
      Quantifier: +? Between one and unlimited times, as few times as possible, expanding as needed [lazy] 
      0-9 a single character in the range between 0 and 9 
    2nd Capturing group (0*) 
     0* matches the character 0 literally 
      Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] 
    $ assert position at end of the string 
+0

Спасибо, я не рассматривал этот тип подхода. Это, безусловно, будет работать, и, как вы указываете, он предлагает полный контроль для настройки вывода, например. для включения минимального количества десятичных знаков. Однако, как я написал в своем собственном ответе ниже, AngularJS уже поддерживает то, что я хочу, просто опуская «число» ng-фильтр. – hjort

Смежные вопросы