2026年9月 USD/IDR 平均汇率为 17,742.56,是22个每日观测值的平均,从9月1日的 17,744.7 到9月30日的 17,891.1。只需请求一次当月每日汇率再求平均。
用 API 计算平均值
使用你要平均的月份的每日观测值。把返回的汇率相加,再除以观测值个数,每个观测值权重相同。请求以 USD 为基准货币,请求的货币为 IDR。把平均值用于表格或发票计算时,请在结果旁保留这个货币对。
- 获取密钥并设置环境变量 在 narwhalapi.com/signup 获取免费密钥,然后放入环境变量
NARWHAL_API_KEY。脚本会读取该变量,并在Authorization请求头中以 Bearer 令牌的形式发送密钥。 - 设置月份和货币 对每日观测值端点使用该月的起止日期。脚本中的请求以 USD 为基准,选取2026年9月的 IDR。其
limit足以容纳该月的观测值行数。 - 请求汇率并计算平均值 脚本会请求观测值,把每个日期与汇率放在一起,并计算算术平均。它先输出观测值个数和平均值,再输出带日期的第一个和最后一个观测值。计算时从每个观测值内的
rates读取汇率,转成数字后再相加。日期与这个数字一起保留,所以输出的第一行和最后一行仍带有日期。import os import requests r = requests.get( "https://api.narwhalapi.com/v1/fx/rates/USD/observations", params={ "currencies": "IDR", "start_date": "2026-09-01", "end_date": "2026-09-30", "limit": 100, }, headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}, timeout=10, ) r.raise_for_status() days = [(d["date"], float(d["rates"][0]["rate"])) for d in r.json()["observations"]] print(len(days), "days, average", round(sum(v for _, v in days) / len(days), 2)) print("first", days[0], "last", days[-1]) - 结合结果查看日期 请把返回的第一个和最后一个日期与你请求的月份对照查看。把这些日期和观测值个数与平均值一起保存,结果的期间就很明确,背后的每日数据行也可以追溯。
一个月的每日观测值行数不会超过100行,所以请求的 limit 足以完成这次计算。时间范围更长时,请沿 next_cursor 获取其余观测值。更长范围的平均值需要该范围内的全部观测值,第一次响应可能只包含其中一部分。
在表格中计算平均值
手动计算一个月时,把每日汇率粘贴到 B 列,并把观测日期放在旁边。使用你要平均的那个月的行。2026年9月 USD/IDR 示例有22个观测值,所以汇率落在这个公式使用的区域内。
=AVERAGE(B2:B23)该公式对这个区域内的汇率取简单平均。与 Python 计算相同,每个每日观测值的贡献相等。粘贴汇率时请保留日期列,这样可以确认单元格代表的月份,以及包含的第一个和最后一个观测值。
在较长的列表中按月求平均时,使用 AVERAGEIFS。用观测日期选出应计入每个平均值的月份的汇率。这样可以把一长串带日期的观测值放在一起,同时用各月自己的行分别计算平均值。
不同情况应选哪种方法
| 情况 | 最合适的方法 | 原因 |
|---|---|---|
| 手动计算一个月 | 表格 | AVERAGE 计算当月每日汇率的平均值 |
| 多个月份或多种货币 | 对起止日期循环的脚本 | 对每个请求的月份或货币重复每日观测值的计算 |
| 符合审计要求的政策汇率 | 会计政策规定的汇率 | 所需方法取决于该政策 |
表格和脚本计算的是每日观测值的平均值。政策汇率可能要求其他方法,例如月末汇率的平均值或加权平均。在把结果用作发票汇率之前,请先确定你的账务需要哪种方法。
月平均汇率要把周末算进去吗?
不要。数据只包含观测日,周末没有数据行。通常的做法是对这些观测日求平均。请用返回的行数作为这个算术平均的除数。如果改用日历天数,计算就会变化,因为总和里只有返回的每日观测值。平均值要与确实有汇率的日期对应。
我的账务需要哪种平均值?
这取决于你的会计政策;请向会计师确认政策规定了哪种汇率和方法。每日观测值的算术平均是常见选择之一。有些会计规则要求使用月末汇率的平均值或加权平均。这些方法选用的汇率或权重不同,所以仅凭每日平均值无法确定账务应采用哪个汇率。
如果响应的起始日期晚于我请求的月份怎么办?
所有账户都可读取完整历史。在将结果视为完整的月度平均值之前,请先查看返回的第一个日期。如果响应从月中开始,返回的观测值只覆盖该部分。
计算示例:2026年9月 USD/IDR
对于2026年9月,取当月22个每日 USD/IDR 观测值的平均。第一个观测值日期为2026年9月1日,最后一个为2026年9月30日。把每日汇率相加,除以观测值个数,再把得到的平均值用于发票计算。
| 2026年9月计算 | 数值 |
|---|---|
| 每日观测值 | 22 |
| 2026年9月1日的汇率 | 17,744.7 |
| 2026年9月30日的汇率 | 17,891.1 |
| 每日观测值的算术平均 | 17,742.56 |
| 发票金额 | USD 8,000 |
| 按月平均汇率开具发票 | 计算:8,000 × 17,742.56 = 141,940,480 IDR |
发布于。