【问题标题】:INR currency formatINR 货币格式
【发布时间】:2016-02-24 09:56:29
【问题描述】:

我需要显示这样的货币格式,如何显示。

₹1
₹10
₹100
₹1,000
₹10,000
₹1,00,000
......

【问题讨论】:

  • 你有现成的代码吗?
  • 注意:印度卢比遵循不同的格式(特别是在指定数字之间的逗号时)。解决方案,您接受的是在美元格式的货币值之前附加“₹”符号。
  • @Code Ninja .. 你有什么解决方案或建议吗?

标签: javascript angularjs


【解决方案1】:

AngularJS

在 HTML 中

{{ currency_expression | currency : symbol : fractionSize}}

例如

{{amount | currency:"₹":0}}

AngularJS 文档Currency Pipe

角度 2+

{{amount | currency:'INR':'symbol-narrow':'4.2-2'}}

您也可以参考Currency Pipe

【讨论】:

  • 这并不代表印度货币标准中的逗号。它只是从数字中删除分数。
  • @NiralMunjariya 确实如此:),你是如何测试的:O
  • 它适用于 v1.3.0 检查here
  • 仅供参考:jsfiddle.net/gascpt2x,我在这里使用了 1.3.0,但它似乎并没有像我预期的那样工作。
  • 根据Indian Number System可以接受。
【解决方案2】:

与美元相比,印度卢比采用不同的格式;所以,不要使用默认的角度货币过滤器来格式化印度卢比

自定义 INR 货币过滤器

var app = angular.module('app', []);

app.controller('indexCtrl', function ($scope) {
    $scope.amount = 10000000.33;
});

app.filter('INR', function () {        
    return function (input) {
        if (! isNaN(input)) {
            var currencySymbol = '₹';
            //var output = Number(input).toLocaleString('en-IN');   <-- This method is not working fine in all browsers!           
            var result = input.toString().split('.');

            var lastThree = result[0].substring(result[0].length - 3);
            var otherNumbers = result[0].substring(0, result[0].length - 3);
            if (otherNumbers != '')
                lastThree = ',' + lastThree;
            var output = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
            
            if (result.length > 1) {
                output += "." + result[1];
            }            

            return currencySymbol + output;
        }
    }
});
<!DOCTYPE html>
<html ng-app="app">
<head>    
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-controller="indexCtrl">
    Input: <input type="text" ng-model="amount">
    <h3>{{amount | INR}}</h3>
</body>
</html>

【讨论】:

  • 如何申请input type="text"
  • 这应该被标记为答案,因为它实际上给出了被询问的内容。
  • 我认为您应该再添加一个条件if (! isNaN(input) &amp;&amp; input != 0) 以避免出现多个'0'
【解决方案3】:

只需在货币过滤器中使用 INR

{{product.product_cost | currency:'INR':true}}

【讨论】:

  • 这不会以所需的格式格式化货币。
【解决方案4】:

您可以使用toLocaleString 来制作过滤器,例如:

Number(data).toLocaleString('en-IN', { style: 'currency', currency: 'INR', maximumFractionDigits: 0})

过滤器示例:

.filter('IndianCurrency', function() {
    return function(data) {
        if (null != data) {
            return Number(data).toLocaleString('en-IN', { style: 'currency', currency: 'INR', maximumFractionDigits: 0});
        } else {
            return Number(0).toLocaleString('en-IN', { style: 'currency',currency: 'INR', maximumFractionDigits: 0});
        }
    };
});

用法:

{{ rent | IndianCurrency }}

【讨论】:

    【解决方案5】:

    如果任何一个在角度 2 中看起来相同,那么这里是解决方案, 1.创建自定义管道 2.在你的html管道代码中使用

    1.创建自定义管道。

    创建文件 indianCurrency.pipe.ts

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({name: 'indianCurrency'})
    export class IndianCurrency implements PipeTransform {
      transform(value: number, args: string[]): any {
    
            if (! isNaN(value)) {
                var currencySymbol = '₹';
                //var output = Number(input).toLocaleString('en-IN');   <-- This method is not working fine in all browsers!           
                var result = value.toString().split('.');
    
                var lastThree = result[0].substring(result[0].length - 3);
                var otherNumbers = result[0].substring(0, result[0].length - 3);
                if (otherNumbers != '')
                    lastThree = ',' + lastThree;
                var output = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
    
                if (result.length > 1) {
                    output += "." + result[1];
                }            
    
                return currencySymbol + output;
            }
    
      }
    }
    

    在 app.module.ts 中声明

     declarations: [
      .....,
        IndianCurrency
      ],
    

    2.在你的html中使用

    {{amount | indianCurrency}}
    

    【讨论】:

      【解决方案6】:

      要打印卢比符号(),请尝试如下:

      {{price | currency:"&#8377;"}}
      

      更多格式请参考this

      【讨论】:

      • @vijay,我找不到你?你能解释一下吗?
      • 这个问题包括 2 个问题。第一个:符号第二个:格式。有关更多信息,请查看@codeninja.sj 答案,它包括两个
      • @vijay,currency 过滤器自己进行格式化。你可以检查一下。 :)
      • @vijay,这里有一个 plunker 链接。
      • rohit 仍然认为 plunkr 是美国货币格式而不是 INR 格式。你可以看到问题它说 INR 它应该是 ₹1,00,000 而不是 ₹111,000,000,默认角度为我们提供货币格式跨度>
      【解决方案7】:

      印度货币空头,如果您想查看 25 万卢比、3 克朗、12 万卢比等 的货币视图,然后在管道下方使用。 它会工作

      import { Pipe, PipeTransform } from '@angular/core';
      
      @Pipe({
        name: 'pricePipe'
      })
      export class PricePipePipe implements PipeTransform {
      
        transform(value: number, args: string[]): any {
      
          if (! isNaN(value)) {
              var currencySymbol = '₹';
              if (value == null) {
                return '';
            }
            var InrRSOut = value;
            InrRSOut = Math.round(InrRSOut);
            var RV = "";
            if (InrRSOut > 0 && InrRSOut < 1000) {
                RV = InrRSOut.toString();
            }
            else if (InrRSOut >= 1000 && InrRSOut < 10000) {
                RV = InrRSOut.toString();
            }
            else if (InrRSOut >= 10000 && InrRSOut < 100000) {
                var f1 = InrRSOut.toString().substring(0, 2);
                var f2 = InrRSOut.toString().substring(2, 5);
                RV = f1 + "," + f2;
      
            }
            else if (InrRSOut >= 100000 && InrRSOut < 1000000) {
                var f1 = InrRSOut.toString().substring(0, 1);
                var f2 = InrRSOut.toString().substring(1, 3);
                if (f2 == "00") {
                    RV = f1 + " Lacs";
                }
                else {
                    RV = f1 + "." + f2 + " Lacs";
                }
            }
            else if (InrRSOut >= 1000000 && InrRSOut < 10000000) {
                var f1 = InrRSOut.toString().substring(0, 2);
                var f2 = InrRSOut.toString().substring(2, 4);
                if (f2 == "00") {
                    RV = f1 + " Lacs";
                }
                else {
                    RV = f1 + "." + f2 + " Lacs";
                }
            }
            else if (InrRSOut >= 10000000 && InrRSOut < 100000000) {
                var f1 = InrRSOut.toString().substring(0, 1);
                var f2 = InrRSOut.toString().substring(1, 3);
                if (f2 == "00") {
                    RV = f1 + " Cr";
                }
                else {
                    RV = f1 + "." + f2 + " Cr";
                }
            }
            else if (InrRSOut >= 100000000 && InrRSOut < 1000000000) {
                var f1 = InrRSOut.toString().substring(0, 2);
                var f2 = InrRSOut.toString().substring(2, 4);
                if (f2 == "00") {
                    RV = f1 + " Cr";
                }
                else {
                    RV = f1 + "." + f2 + " Cr";
                }
            }
            else if (InrRSOut >= 1000000000 && InrRSOut < 10000000000) {
                var f1 = InrRSOut.toString().substring(0, 3);
                var f2 = InrRSOut.toString().substring(3, 5);
                if (f2 == "00") {
                    RV = f1 + " Cr";
                }
                else {
                    RV = f1 + "." + f2 + " Cr";
                }
            }
            else if (InrRSOut >= 10000000000) {
                var f1 = InrRSOut.toString().substring(0, 4);
                var f2 = InrRSOut.toString().substring(6, 8);
                if (f2 == "00") {
                    RV = f1 + " Cr";
                }
                else {
                    RV = f1 + "." + f2 + " Cr";
                }
            }
            else {
                RV = InrRSOut.toString();
            }
            return currencySymbol + RV;
          }
      
      }
      
      }
      

      在 HTML 中使用类似

      {{ 125000000 | pricePipe }}
      

      输出

      ₹12.50 Cr
      

      【讨论】:

        【解决方案8】:
        
        @Pipe({
          name: 'customCurrency'
        })
        export class CustomCurrencyPipe implements PipeTransform {
        
          transform(value: number, isSymbol: string, decPointer: string, isPrefix: boolean): string {
        
            if (!isNaN(value)) {
               var formatted_value;
              var currencyText = isSymbol;
              if (currencyText == '₹') {
                // for Indian number system
                formatted_value = new Intl.NumberFormat('en-IN').format(value)
              }
              else {
                formatted_value = new Intl.NumberFormat().format(value)
              }
              return currencyText + ' ' + formatted_value;
            }
          }
        
        }
        

        HTML

        &lt;div&gt;{{ 10000000 | customCurrency:'₹':'1.0':false}}&lt;/div&gt;

        【讨论】:

          【解决方案9】:

          我相信currency pipe会解决这个问题

          注意:符号中数字参数的语法是 -> "numberOfInteger:minimumFractions-maxFractions"

          输入: {{1499 |货币:'INR':'符号':'1.0'}}

          输出: 1,499 卢比

          解释 -> '1.0' 表示货币管道将至少显示 1 位数字且没有小数点。

          让我再举一个例子:

          输入: {{99 |货币:'INR':'符号':'3.2-2'}}

          输出: ¥099.00

          解释 -> '3.2-2' 表示货币管道将显示至少 3 位数字,并显示小数点最小 2 个小数和最大 2 个小数。

          【讨论】:

            【解决方案10】:

            试试这个

            var x=1000;
            x=x.toString();
            var lastThree = x.substring(x.length-3);
            var otherNumbers = x.substring(0,x.length-3);
            if(otherNumbers != '')
                lastThree = ',' + lastThree;
            var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
            
            alert(res);
            

            【讨论】:

              【解决方案11】:

              用于显示小数点后两位的金额...

              试试这个:

              var num=1234.567;
               var ans= num.toLocaleString('en-IN',{ style: 'currency', currency: "INR",minimumFractionDigits:2,maximumFractionDigits:2 });
              
              //output
              //₹ 1,234.57
              

              【讨论】:

              • 谢谢,我可以创建自定义过滤器:module.filter('formatINR', function () { return function (input) { if (angular.isUndefined(input) || input === null || input == 'null') { return ''; } return input.toLocaleString('en-IN', { currency: "INR", minimumFractionDigits: 2, maximumFractionDigits: 2 }); } });跨度>
              【解决方案12】:

              我知道有点晚了,但您可以使用处理的https://osrec.github.io/currencyFormatter.js/

              那么你只需要:

              // Outputs ₹ 25,34,234.00
              OSREC.CurrencyFormatter.format(2534234, { currency: 'INR' }); 
              

              【讨论】:

                【解决方案13】:

                您可以使用管道格式化 INR 中的货币,甚至可以像删除十进制值(即 Paise)一样

                {{bal.walletamt | currency:"₹ " : false : '2.0-0'}}
                

                此代码也适用于 ionic3

                【讨论】:

                  【解决方案14】:
                  {{myobject.price | currency:'INR'}}
                  

                  如果你不需要最后一个十进制值,那么你可以使用数字管道

                  ₹{{myobject.price | number}}
                  

                  如果你不需要最后一个十进制值但你想使用内置的 货币管道功能,然后您可以为 货币,或者您可以创建一个拆分管道并与货币一起使用

                  Ex: {{myobject.price  | currency:'INR' | custSplit:".":"0"}}
                  

                  注意:custSplit- 它是一个自定义管道,它可以拆分字符串 传递(这里-“。”)并获取我们需要的索引(这里-“0”索引)。

                  有关管道的更多信息,请阅读angular 2+ doc

                  【讨论】:

                    【解决方案15】:

                    使用逗号分隔符管道和自定义 INR 货币管道的组合

                    在 HTML 中

                    1.首先使用逗号分隔符。

                    2.之后使用自定义管道 INRpipe

                    {{ 货币表达式 |号码:'':'en-IN' | INR 管道 }}

                    管道.ts

                    转换(值:字符串):字符串 {

                    if (!value) {
                      return null;
                    }
                    
                    return `₹${value}`; // this line will only solve your problem
                    

                    以下是可选的

                    / 如果要在货币中添加两位小数 /

                    那就往这边走吧。

                    if (value.includes('.')) {

                      return `₹${value}`;
                    
                    }
                    

                    返回₹${value}.00;

                    }

                    【讨论】:

                      【解决方案16】:

                      只需像这样添加货币过滤器。

                       {{object.price | currency:"INR":true}}
                      

                      【讨论】:

                        【解决方案17】:
                        1. 获取最后三位之前的数字。
                        2. 将其余数字替换为prefix.replace(/\B(?=(?:\d{2})+(?!\d))/g, ",")
                        3. 将上述部分与修改后的前缀结合起来

                        提到了here,有关此正则表达式为何将逗号放置在正确位置的完整解释。

                        【讨论】:

                          【解决方案18】:

                          在角度,创建一个这样的自定义过滤器

                          myApp.filter('ic', function()
                          {
                             return function(value)
                             {
                                 return '₹ ' + value;
                             }
                          });
                          

                          然后你可以{{data|number|ic}}

                          【讨论】:

                            【解决方案19】:

                            你可以使用这个:{{amount:| currency:"₹"}} 或者你可以使用十六进制代码"₹"

                            输入:{{3*100000000 | currency:"₹"}}

                            输出:₹300,000,000.00

                            【讨论】:

                              【解决方案20】:

                              如果“金额”是包含要转换为 INR 格式的数字的变量,请在您的 html 代码中使用下面给出的方法之一 -

                              1。 {{ 金额 |货币:'INR':true}}

                              结果:₹150,000.00

                              2。 {{ 金额 |货币:'INR':true}}

                              结果:1​​50,000.00 印度卢比

                              3。 {{ amount.toLocaleString('en-IN')}}

                              结果:1​​,50,000

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 2019-06-11
                                • 1970-01-01
                                • 2015-10-24
                                • 2015-06-14
                                • 1970-01-01
                                • 2012-01-22
                                相关资源
                                最近更新 更多