You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS如何调整number过滤器实现印度卢比格式的逗号分隔数字展示

AngularJS印度卢比数字格式调整方案

AngularJS内置的number过滤器默认采用国际通用的千位分隔规则,无法适配印度卢比特有的「后三位分隔、前序每两位分隔」的数字分组规则,可通过自定义过滤器实现需求:

方法1:基于原生国际化API实现(推荐)

直接调用浏览器内置的Intl.NumberFormat接口,使用印度区域en-IN的原生格式化规则,无需手动处理正则匹配,兼容性好且逻辑更严谨:

// 在你的AngularJS模块中注册自定义过滤器
angular.module('yourAppName', [])
.filter('indianCurrency', function() {
  return function (amount, decimal = 2) {
    if (isNaN(parseFloat(amount))) return 'Rs. 0.00';
    return new Intl.NumberFormat('en-IN', {
      minimumFractionDigits: decimal,
      maximumFractionDigits: decimal
    }).format(amount).replace('₹', 'Rs. ');
  };
});

模板中使用方式:

{{total | indianCurrency}}

输出效果即为你需要的Rs. 12,36,762.51,如需调整小数位数可传参:{{total | indianCurrency:3}}

方法2:手动正则匹配实现

如果需要兼容极低版本不支持Intl接口的浏览器,可以手动处理数字分组逻辑:

angular.module('yourAppName', [])
.filter('indianCurrency', function() {
  return function (amount, decimal = 2) {
    if (isNaN(parseFloat(amount))) return 'Rs. 0.00';
    // 拆分整数与小数部分
    let num = Number(amount).toFixed(decimal);
    let [intPart, decimalPart] = num.split('.');
    // 处理整数部分分组
    let lastThree = intPart.slice(-3);
    let prefixPart = intPart.slice(0, -3);
    if (prefixPart) lastThree = ',' + lastThree;
    let formattedInt = prefixPart.replace(/\B(?=(\d{2})+(?!\d))/g, ',') + lastThree;
    return `Rs. ${formattedInt}.${decimalPart}`;
  };
});

使用方式和第一种方法完全一致。

内容的提问来源于stack exchange,提问作者vellai durai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:30:00