前端数字格式化展示方法

日常开发中,前端数字格式化展示

日常开发中,数字展示涉及货币格式化、小数点后位数、千位分隔符之类的处理展示很常见,网上也有很多现成的方法。在这记录一下在日常开发中见到的另一种实现方式。

Number.prototype.toLocaleString()

接下来的内容主要是围绕Number.prototype.toLocaleString()这个方法。

toLocaleString 是 JavaScript 的内置方法,用于格式化数字为字符串,考虑了地区和语言的差异。这个方法的灵活性使得它在实际开发中有很多有用的应用场景。

基本用法:

javascript 复制代码
const number = 1234567.89;

// 默认地区格式化
const formattedDefault = number.toLocaleString();
console.log(formattedDefault); // 根据浏览器/环境的默认地区输出:"1,234,567.89"

// 指定地区格式化
const formattedWithLocale = number.toLocaleString('fr-FR');
console.log(formattedWithLocale); // 指定法国地区输出:"1 234 567,89"

在上述例子中,toLocaleString 默认使用环境或浏览器的默认地区,但也可以通过传递一个地区字符串参数来指定特定的地区。

小数位数和千位分隔符:

javascript 复制代码
const number = 1234567.89123;

// 限定小数点后两位
const formattedWithPrecision = number.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
console.log(formattedWithPrecision); // 输出:"1,234,567.89"

// 不使用千位分隔符
const formattedWithoutSeparator = number.toLocaleString(undefined, { useGrouping: false });
console.log(formattedWithoutSeparator); // 输出:"1234567.89"

通过在 toLocaleString 的第二个参数中传递一个选项对象,可以设置小数点后的位数,以及是否使用千位分隔符等。

货币格式化:

javascript 复制代码
const currencyValue = 1234567.89;

// 货币格式化
const formattedCurrency = currencyValue.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
console.log(formattedCurrency); // 输出:"$1,234,567.89"

toLocaleString 还支持货币格式化,可以通过指定 style 为 'currency',并提供 currency 参数来指定货币类型。

实际应用场景:

  1. 展示用户友好的数字: 在 UI 中展示数字时,使用 toLocaleString 可以使数字更易读,符合用户的地域习惯。

  2. 报表和数据可视化: 在报表或数据可视化工具中,使用 toLocaleString 可以为数字添加千位分隔符,提高数据的可读性。

  3. 国际化: 在支持多语言的应用中,根据用户的语言偏好,使用 toLocaleString 可以动态地调整数字格式。

  4. 金融应用: 对于需要处理货币的应用,toLocaleString 是一个非常有用的工具,可以方便地将数字格式化为符合财务标准的字符串。

总的来说,toLocaleString 是一个强大而灵活的方法,可以用于各种场景,从而提升用户体验,使得数字在不同地区和语言下更易读和易懂。

借助这个方法,封装了一个数字格式化函数方便日常使用。

javascript 复制代码
/**
 * 判断为空
 * @param {any} obj 判断的数据
 * @returns {Boolean} 是否为空
 */
export const isEmpty = (obj) => {
    return typeof obj === 'undefined' || obj === null || obj === '';
}

/**
 * 数字格式化
 * @param {number} value - 需要格式化的数值
 * @param {number} [precision] - 小数点后的位数
 * @returns {string} 格式化后的字符串
 */
export const parseNum = (value, precision) => {
    if (isEmpty(value) || isNaN(value)) return '--';
    if (isEmpty(precision) || isNaN(precision))
        return value.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 10});
    return value.toLocaleString(undefined, {minimumFractionDigits: precision, maximumFractionDigits: precision});
}

isEmpty函数的作用是判断传入的数据 obj 是否为空。如果 obj 的类型是 undefined,或者 obj 的值是 null,或者 obj 是空字符串 '',则函数返回 true,表示为空;否则返回 false,表示不为空。

parseNum函数用于格式化数字。它接受两个参数,value 表示需要格式化的数值,precision 表示小数点后的位数(可选)。首先,函数会通过调用 isEmpty 函数判断 value 是否为空或者是否是非数值,如果是,则返回字符串 '--' 表示无效值。接着,函数检查是否提供了 precision 参数,如果没有或者不是有效的数字,则使用 toLocaleString 方法将 value 格式化成字符串,保留小数点后的位数在 0, 10 范围内。如果提供了有效的 precision 参数,则使用相应的小数位数进行格式化。最后,函数返回格式化后的字符串。 例如,假设 value 的值为 1234567.89,而 precision 的值为 2,那么函数返回的字符串可能是 "1,234,567.89",其中千位分隔符是根据默认的地区规范添加的,小数点后保留两位。

封装这个函数已经满足了在工作中简单的数字格式化千分位和保留小数点后几位,空值展示的简单需求。

相关推荐
wangruofeng2 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng2 小时前
给前端开发者的 100 个设计参考网站
前端·设计
M--Y4 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
星栈5 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技5 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569155 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马8 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng8 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding9 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
johnjincaaaa9 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端