3

在 AngularJS 中,如何在 HTML 页面上输出浮点数而不会损失精度并且不会用 0 进行不必要的填充?

我已经考虑过“数字”ng-filter(https://docs.angularjs.org/api/ng/filter/number),但 fractionSize 参数会导致固定的小数位数:

{{ number_expression | number : fractionSize}}

我正在寻找在其他各种语言中被称为“精确再现性”、“规范字符串表示”、repr、往返等的东西,但我找不到任何与 AngularJS 类似的东西。

例如:

  • 1 => "1"
  • 1.2 => "1.2"
  • 1.23456789 => "1.23456789"
4

2 回答 2

2

我自己偶然发现了一个明显的解决方案!完全删除“数字”ng-filter 的使用将导致 AngularJS 根据我的要求简单地将表达式转换为字符串。

所以

{{ number_expression }}

代替

{{ number_expression | number : fractionSize}}
于 2015-02-18T12:58:28.663 回答
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
于 2015-02-18T11:02:48.113 回答