前端数字格式化展示方法

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

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

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",其中千位分隔符是根据默认的地区规范添加的,小数点后保留两位。

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

相关推荐
Lysun0016 分钟前
[less] Operation on an invalid type
前端·vue·less·sass·scss
土豆湿13 分钟前
拥抱极简主义前端开发:NoCss.js 引领无 CSS 编程潮流
开发语言·javascript·css
J总裁的小芒果21 分钟前
Vue3 el-table 默认选中 传入的数组
前端·javascript·elementui·typescript
Lei_zhen9624 分钟前
记录一次electron-builder报错ENOENT: no such file or directory, rename xxxx的问题
前端·javascript·electron
辣条小哥哥25 分钟前
electron主进程和渲染进程之间的通信
javascript·electron·ecmascript
咖喱鱼蛋26 分钟前
Electron一些概念理解
前端·javascript·electron
yqcoder27 分钟前
Vue3 + Vite + Electron + TS 项目构建
前端·javascript·vue.js
鑫宝Code1 小时前
【React】React Router:深入理解前端路由的工作原理
前端·react.js·前端框架
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
永乐春秋3 小时前
WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性
前端