📅  最后修改于: 2023-12-03 15:17:03.741000             🧑  作者: Mango
在Web开发中,经常需要将数字格式化为货币格式。Javascript提供了一些内置方法,可以帮助我们实现这一目标。
toLocaleString()
是 javascript 内置的用于格式化数字的方法。它可以将数字转换为本地格式,以便于阅读和显示。我们可以使用它将数字格式化为货币格式。
const amount = 30000.50;
const formattedAmount = amount.toLocaleString("en-US", {style: "currency", currency: "USD"}) // "$30,000.50"
这段代码将数字 30000.50
格式化为美元,并将结果储存在变量 formattedAmount
中。
请注意,如果您要格式化的数字是 NaN
,Infinity
或 -Infinity
,toLocaleString()
将会抛出 RangeError
错误。因此,在使用 toLocaleString()
时,您应该做好异常处理。
如果您想自定义格式化逻辑,可以使用自定义函数。
function formatMoney(amount, decimalCount = 2, decimal = ".", thousands = ",") {
try {
decimalCount = Math.abs(decimalCount);
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;
const negativeSign = amount < 0 ? "-" : "";
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
let j = (i.length > 3) ? i.length % 3 : 0;
return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
} catch (e) {
console.log(e)
}
}
这个函数接受四个参数:
amount
- 必需,要格式化的数字。decimalCount
- 可选,小数点后保留的位数,默认值为 2
。decimal
- 可选,小数点的分隔符,默认值为 "."
。thousands
- 可选,千位分隔符,默认值为 ","
。下面是一个使用自定义函数的例子。
const amount = 30000.50;
const formattedAmount = formatMoney(amount,2,"."," "); // "30 000.50"
在这个例子中,我们将数字 30000.50
格式化为带有空格的货币格式,并将结果储存在变量 formattedAmount
中。
在开发中,如果频繁使用格式化货币,为避免重复造轮子,我们可以使用一些优秀的Javascript库,如 Numeral.js 或 accounting.js。
这里我们以 Numeral.js
为例,先安装库:
npm install numeral --save
import numeral from 'numeral'
const amount = 30000.50;
const formattedAmount = numeral(amount).format('$0,0.00');
这段代码将数字 30000.50
格式化为美元,并将结果储存在变量 formattedAmount
中。在这个例子中,格式化字符 $0,0.00
用来表示美元格式。
Numeral.js
具有丰富的格式化选项及插件,便于我们快速定制及扩展,更多详细信息请参考官方文档。
这里介绍了三种实现货币格式化的方法。每种方法都有其特殊的应用场景,因此我们应该根据实际情况选择最适合的方法。