Number.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use client";
  2. import * as React from 'react';
  3. const StatisticNumber = props => {
  4. const {
  5. value,
  6. formatter,
  7. precision,
  8. decimalSeparator,
  9. groupSeparator = '',
  10. prefixCls
  11. } = props;
  12. let valueNode;
  13. if (typeof formatter === 'function') {
  14. // Customize formatter
  15. valueNode = formatter(value);
  16. } else {
  17. // Internal formatter
  18. const val = String(value);
  19. const cells = val.match(/^(-?)(\d*)(\.(\d+))?$/);
  20. // Process if illegal number
  21. if (!cells || val === '-') {
  22. valueNode = val;
  23. } else {
  24. const negative = cells[1];
  25. let int = cells[2] || '0';
  26. let decimal = cells[4] || '';
  27. int = int.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator);
  28. if (typeof precision === 'number') {
  29. decimal = decimal.padEnd(precision, '0').slice(0, precision > 0 ? precision : 0);
  30. }
  31. if (decimal) {
  32. decimal = `${decimalSeparator}${decimal}`;
  33. }
  34. valueNode = [/*#__PURE__*/React.createElement("span", {
  35. key: "int",
  36. className: `${prefixCls}-content-value-int`
  37. }, negative, int), decimal && (/*#__PURE__*/React.createElement("span", {
  38. key: "decimal",
  39. className: `${prefixCls}-content-value-decimal`
  40. }, decimal))];
  41. }
  42. }
  43. return /*#__PURE__*/React.createElement("span", {
  44. className: `${prefixCls}-content-value`
  45. }, valueNode);
  46. };
  47. export default StatisticNumber;