📜  JavaScript 中的货币转换器(1)

📅  最后修改于: 2023-12-03 15:16:09.493000             🧑  作者: Mango

JavaScript 中的货币转换器

在任何一个网站上,都很有可能会碰到货币转换的需求,而 JavaScript 中提供了一些方便的工具来进行货币转换。

一、使用 Intl.NumberFormat 进行货币格式化

Intl.NumberFormat 是一个 JavaScript 内置的工具,可以用来格式化数字。其中,最常见的用途就是格式化货币。以下是格式化金额为人民币格式的样例:

const amount = 1234567.89;
const formatter = new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY' });
console.log(formatter.format(amount)); // ¥1,234,567.89

其中,第一个参数是语言地区码,这里使用了简体中文 'zh-CN'。第二个参数则是包含了货币相关信息的配置对象。currency 属性用来指定货币类型,这里是人民币 "CNY"。更详细的配置选项和用法可以查阅 MDN 文档

二、汇率转换

当需要将一个货币转换为另一个货币时,需要用到汇率转换。以下是一个简单的实现:

const rates = {
  USD: 1, // 美元汇率为 1
  EUR: 0.85, // 欧元汇率为 0.85
  CNY: 6.8, // 人民币汇率为 6.8
};

function convert(amount, from, to) {
  const rate = rates[from] / rates[to];
  return (amount * rate).toFixed(2);
}

console.log(convert(100, 'USD', 'EUR')); // 85.00
console.log(convert(100, 'USD', 'CNY')); // 680.00

上述代码中,rates 对象中列出了各种货币的汇率,以美元为基准。convert 函数以金额、原货币种类和目标货币种类作为参数,先计算出汇率,再使用 toFixed 方法来保留两位小数。使用时,只需要传入对应参数即可。

三、结合 API 使用

上述汇率转换的做法显然有限制,需要将所有汇率都预先写在代码中。通过与货币 API 结合可以解决这个问题,以下是举例:

const apiKey = 'YOUR_API_KEY';

async function getExchangeRates(base) {
  const response = await fetch(`https://api.exchangeratesapi.io/latest?base=${base}&access_key=${apiKey}`);
  const rates = await response.json();
  return rates.rates || {};
}

async function convert(amount, from, to) {
  const rates = await getExchangeRates(from);
  const rate = rates[to];
  return (amount * rate).toFixed(2);
}

console.log(await convert(100, 'USD', 'EUR'));
console.log(await convert(100, 'USD', 'CNY'));

首先,需要准备一个 API Key,可以在 Exchange Rates API 上申请。然后,实现一个异步函数 getExchangeRates,输入参数为基准货币种类,通过 fetch,将返回的 JSON 数据解析出汇率对象。注意,可以在 URL 中通过 base 参数设置基准货币。最后,实现 convert 函数,在 getExchangeRates 返回的汇率对象中查找目标汇率即可。

总结

JavaScript 中提供了一些方便的工具来进行货币转换。本文介绍了如何使用 Intl.NumberFormat 进行货币格式化,如何手动进行汇率转换,以及如何使用货币 API 来获取实时汇率。在实践中,需要注意货币类型的精度和舍入规则,以及 API 使用的限制和费用问题。