【问题标题】:Angular Js currency, symbol euro afterAngular Js 货币,符号欧元后
【发布时间】:2015-02-17 07:19:36
【问题描述】:

如何将符号欧元从值的前面移动到它的后面?

例子:

{{product.price | currency : "€"}} 将产生€ 12.00

但我想要12.00 €

【问题讨论】:

  • 尽管我很喜欢 AngularJS,但这些日常使用的语言环境应该被覆盖或完全忽略。只是在一种货币前面加上 $ 符号是没有用的。这应该是本地化的。
  • 为了记录,官方写的是 12.00 欧元,而不是相反。
  • @Kriem 这取决于国家和语言。在爱尔兰和马耳他为 12.00 欧元,在塞浦路斯也是如此,但在希腊为 12.00 欧元。在德国是 12,00 欧元,但在奥地利是 12,00 欧元。见Wikipedia

标签: javascript angularjs currency


【解决方案1】:

您不必破解货币过滤器!

AngularJS 对 i18n/l10n 有很好的支持。货币过滤器使用区域设置服务中的默认货币符号并根据区域设置对其进行定位。

所以一切都是为了支持和设置正确的语言环境。

<script src="i18n/angular-locale_de-de.js"></script>

如果您使用的是npmbower,则所有语言环境都可以通过angular-i18n package 获得。

<span>{{ product.price | currency }}</span>

现在将产生以下输出:

65,95 €

支持多种本地化

如果您想支持多种本地化,请注意货币符号,因为它会更改为所用区域设置的默认货币。但是65,95 €$65,95 不同。提供货币符号作为参数以确保安全:

<span>{{ product.price | currency:'€' }}</span>

de-de 中,输出仍然是65,95 €,但如果位置是例如。 en-us 应该是 €65.95(尽管有其他说法 the correct format to display euro prices in English)。

要了解有关 angular 和 i18n/l10n 的更多信息,请参阅developer guide

【讨论】:

  • 是的。欧元的位置不仅取决于国家,还取决于地区。一个很好的例子是拥有荷兰语和法语的比利时。我们不断收到错误报告说它应该被留下,不正确......不剩下!右左!!?!?! OMG....我从那以后离开了公司,他们还没有决定:>
【解决方案2】:

您不能使用货币过滤器。您可以自己编写,也可以只使用数字过滤器。

{{(produce.price | number:2) + "€"}}

【讨论】:

  • 其实可以的。使用 angulars i18n 支持非常适用于货币过滤器,正如预期的那样:stackoverflow.com/a/34953870/555274
  • 更简单的方式:{{produce.price | number:2 }} €
【解决方案3】:

使用这个技巧。

<div>{{product.price | currency : '' }} €</div>

【讨论】:

    【解决方案4】:

    提出的解决方案都是肮脏的。

    首先,过滤器通过将其添加为参数来允许更改符号:

    {{product.price | currency : "€"}}
    

    但正确的方法是按照@Andreas 的建议本地化您的应用程序 如果您在应用程序中使用意大利语言环境设置 (it-it) 对应用程序进行本地化,则只需调用过滤器即可获得 € 符号。

    {{product.price | currency }}
    

    意大利语言环境设置将欧元符号放在货币值之前。 您可以更改 che locale 值,或者按照以下链接答案中的建议更好地覆盖它们:

    Why AngularJS currency filter formats negative numbers with parenthesis?

    您可以覆盖区域设置,将您的货币符号 (\u00A4) 作为正值和负值的前缀或后缀。

    app.config(['$provide', function($provide) {
        $provide.decorator('$locale', ['$delegate', function($delegate) {
          if($delegate.id == 'it-it') {
                $delegate.NUMBER_FORMATS.PATTERNS[1].negPre = '\u00A4\u00a0-';
                $delegate.NUMBER_FORMATS.PATTERNS[1].negSuf = '';
                $delegate.NUMBER_FORMATS.PATTERNS[1].posPre = '\u00A4\u00a0';
                $delegate.NUMBER_FORMATS.PATTERNS[1].posSuf = '';
          }
          return $delegate;
        }]);
      }]);
    

    所以在这条指令之后过滤器:

    {{product.price | currency}} 
    

    将产生以下输出

    € 12
    

    【讨论】:

    • 我有我的场景:我有多个订单行,每行可能有不同的不同货币
    【解决方案5】:

    Angularjs 对国际化和本地化有很好的支持。 国际化和本地化的应用取决于您的应用范围。 例如,如果您的应用程序仅支持欧元,那么您只需要欧元的本地化,而不需要所有货币及其格式。

    在这种情况下(假设您的情况与上述类似),您可以创建一个应用配置并使用一些装饰器将语言环境设置为您需要的本地化。装饰器函数拦截服务的创建,允许它覆盖或修改服务的行为。

    angular
      .module('app', [])
      .config(['$provide', function($provide) {
        $provide.decorator('$locale', ['$delegate', function($delegate) {
          $delegate.NUMBER_FORMATS = {
            DECIMAL_SEP: '.',
            GROUP_SEP: ',',
            PATTERNS: [{ // Decimal Pattern
              minInt: 1,
              minFrac: 0,
              maxFrac: 3,
              posPre: '',
              posSuf: '',
              negPre: '-',
              negSuf: '',
              gSize: 3,
              lgSize: 3
            }, { //Currency Pattern
              minInt: 1,
              minFrac: 0,
              maxFrac: 1,
              posPre: '\u00A4',
              posSuf: '',
              negPre: '(\u00A4',
              negSuf: ')',
              gSize: 3,
              lgSize: 3
            }],
            CURRENCY_SYM: '€'
          }
          return $delegate;
        }]);
      }])
      .controller('appController', ['$scope', function($scope) {
        $scope.price = 20.55;
      }])
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
    <div ng-app="app">
      <div ng-controller="appController">
        Price : {{price | currency}}
      </div>
    </div>

    上述配置显示了小数和货币设置的所有可能值。 您可以在应用级别根据您的要求进行更改。

    如果您不希望效果在整个应用程序中更好,则使用指令

    【讨论】:

    • 感谢您澄清哪种模式用于小数,哪种模式用于货币。
    【解决方案6】:

    这是一个很老的问题,现在不一样了。也许那时也是如此。

    所以如果其他人发现了这个..

    但您需要包含正确的语言环境才能在货币过滤器中获得正确的货币格式。

    检查角度文档,例如荷兰货币格式为 5,00 欧元,而英语为 5,00 欧元,美国为 5.00 欧元

    【讨论】:

    • 提示:链接到 Angular 文档中提到的部分会很好。 ;)
    【解决方案7】:

    我在法国的项目(生产中)中使用此解决方案(必须始终显示 5.00 欧元,从不显示 5.00 欧元):

    <span>Price: {{product.price| currency:""}} €</span>
    

    DEMO

    请在投票太快之前阅读这篇文章的真正问题(Angular Js 货币,符号欧元)!!!!

    【讨论】:

    • 在美国,$ 符号位于数字之前。在欧洲,€ 符号总是在数字后面。=> $5.00 - 5.00 €
    • @webdevbyjoss,即使在美国,它也必须始终显示 5.00 欧元。
    • @webdevbyjoss,阅读问题:will produce € 12.00, but I would like 12.00 €
    • 欧元符号在之前还是之后取决于国家。有几个国家在数字前使用欧元符号!
    • @EricSmekens,阅读这篇文章“Angular Js 货币,符号欧元之后”的问题。在法国,欧元符号在后面,这是 corsaro 在这里提出的问题。
    【解决方案8】:

    使用locale (如本线程答案中所述 - Angular Js currency, symbol euro after) 似乎是正确的方法,但它似乎不能灵活地将货币符号或名称放在你想要的相对于你的价值的地方参考。如果您需要在您的价值之后添加您的货币符号,您可以有一个单独的 product.currency 字段并将其插入到您的价格值之后(或之前)。

    因此,如果您有product.price = 40product.currency = '€',则可以使用{{product.price}} {{product.currency}} 将其显示为40 欧元。或通过反转字段获得 40 欧元:{{product.currency}} {{product.price}}

    如果您这样做了 (https://angular.io/api/common/DecimalPipe),您可能希望通过十进制管道格式化 product.price 值。 - 所以“40.00 €”将是:{{product.amount | number:'2.2-2'}} {{product.currency}}

    fyi - 在这种情况下,我可能会有一个单独的字段 product.currencyproduct.currencySymbol(例如分别为“USD”和“$”),但随后您将更多地了解 @987654333 的功能@ 正如我在上面链接的其他答案中所引用的。但是,如果您需要将货币名称或符号放置在相对于值的不同位置,而不是 Angular 允许您通过其原生管道执行的操作,并且想要使用特定于您正在使用的记录或集合的货币无需在页面上对其符号或名称进行硬编码(例如,如果您要显示多种货币),这是一种动态执行此操作的方法。

    【讨论】:

      【解决方案9】:

      您可以创建一个过滤器:

      app.filter('euroFormat', function () {
          return function (input) {
              return input+' \u20AC';
          };
      });
      

      并将其应用于您的 html 代码:

      <span>Price: {{product.price| euroFormat}}</span>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-26
        • 2019-05-11
        • 2022-01-23
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 2013-03-16
        • 2015-07-23
        相关资源
        最近更新 更多