number-format.js 819 B

1234567891011121314151617181920212223242526272829
  1. function toFiniteNumber(value, fallback = 0) {
  2. if (typeof value === 'string') {
  3. const text = value.trim()
  4. const directValue = Number(text)
  5. if (Number.isFinite(directValue)) return directValue
  6. const match = text.match(/^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?/i)
  7. const textValue = match ? Number(match[0]) : NaN
  8. return Number.isFinite(textValue) ? textValue : fallback
  9. }
  10. const numberValue = Number(value)
  11. return Number.isFinite(numberValue) ? numberValue : fallback
  12. }
  13. function formatFixedValue(value, precision = 2) {
  14. const numberValue = toFiniteNumber(value, NaN)
  15. if (!Number.isFinite(numberValue)) return '--'
  16. const text = numberValue.toFixed(precision)
  17. return Number(text) === 0 ? (0).toFixed(precision) : text
  18. }
  19. module.exports = {
  20. formatFixedValue,
  21. toFiniteNumber
  22. }