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

如何在React Data Table Component中以印度数字格式显示带逗号分隔的数值

要在react-data-table-component中实现印度格式的逗号分隔数字显示,你可以利用组件的自定义单元格渲染能力,结合JavaScript的Intl.NumberFormat API来快速实现。下面是具体步骤和代码示例:

1. 编写印度数字格式化函数

使用Intl.NumberFormat并指定en-IN locale,就能自动按照印度的数字分组规则(比如1,00,000表示1 lakh,1,00,00,000表示1 crore)来格式化数值。同时处理整数和小数的显示逻辑:

const formatIndianNumber = (num) => {
  // 处理空值情况,避免显示错误
  if (num === null || num === undefined) return '-';
  // 整数不显示小数位,小数保留两位
  return new Intl.NumberFormat('en-IN', {
    minimumFractionDigits: num % 1 === 0 ? 0 : 2,
    maximumFractionDigits: 2
  }).format(num);
};

2. 修改Columns配置,添加自定义单元格渲染

在需要格式化的列中,通过cell属性定义自定义渲染逻辑,该属性接收当前行数据,返回格式化后的内容。注意要匹配数据中的实际键名(比如你数据里增长率的键是Growth rate in per cent__1,需要修正columns里的selector确保排序功能正常):

const columns = [
  { name: "Year", selector: "Year", sortable: true },
  { 
    name: "India's GDP in crore", 
    selector: "India's GDP* in crore", 
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["India's GDP* in crore"])
  },
  { 
    name: "Growth rate in per cent", 
    selector: "Growth rate in per cent", 
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["Growth rate in per cent"])
  },
  { 
    name: "State's GSDP in crore", 
    selector: "State's GSDP* in crore", 
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["State's GSDP* in crore"])
  },
  { 
    name: "Growth rate in percent(1)", 
    selector: "Growth rate in per cent__1", // 修正为数据中的实际键名
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["Growth rate in per cent__1"])
  },
];

3. 完整的Table组件代码

把格式化函数和修改后的columns整合到你的组件中,同时修正原代码里defaultSortField的错误(原代码写的title不存在,应该改为Year):

import { useContext } from 'react';
import { DataTable } from 'react-data-table-component';
import Card from '@mui/material/Card';
import SortIcon from '@mui/icons-material/Sort';
import MyContext from './MyContext'; // 导入你的上下文

const formatIndianNumber = (num) => {
  if (num === null || num === undefined) return '-';
  return new Intl.NumberFormat('en-IN', {
    minimumFractionDigits: num % 1 === 0 ? 0 : 2,
    maximumFractionDigits: 2
  }).format(num);
};

const columns = [
  { name: "Year", selector: "Year", sortable: true },
  { 
    name: "India's GDP in crore", 
    selector: "India's GDP* in crore", 
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["India's GDP* in crore"])
  },
  { 
    name: "Growth rate in per cent", 
    selector: "Growth rate in per cent", 
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["Growth rate in per cent"])
  },
  { 
    name: "State's GSDP in crore", 
    selector: "State's GSDP* in crore", 
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["State's GSDP* in crore"])
  },
  { 
    name: "Growth rate in percent(1)", 
    selector: "Growth rate in per cent__1",
    sortable: true, 
    right: true,
    cell: (row) => formatIndianNumber(row["Growth rate in per cent__1"])
  },
];

const Table = () => {
  const ctx = useContext(MyContext);
  return (
    <div className="App">
      <Card>
        <DataTable 
          title="Table1.1" 
          columns={columns} 
          data={ctx.reportData.Tables2.Table1} 
          defaultSortField="Year" 
          sortIcon={<SortIcon />} 
        />
      </Card>
    </div>
  );
};

export default Table;

补充说明

  • Intl.NumberFormat('en-IN')会自动处理印度数字的分组规则,比如13771875会被格式化为13,77,1875,完全符合印度财务数据的显示习惯。
  • 格式化函数中处理了空值场景,避免表格出现异常显示。
  • 修正了columns中selector与数据键名不匹配的问题,确保排序功能正常工作。

内容的提问来源于stack exchange,提问作者Anil Dharni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:57:46