MetalAPI
XAU3,997.89−1.54%XAG53.936−1.51%XPT1,554.47−0.83%XPD1,047.03−0.44%XCU6.5080+2.29%WTI103.27+3.82%BRENT111.70−1.30%EUR1.120400−0.01%GBP1.337500−0.01%JPY0.0063761+0.14%CHF1.213445−0.25%TRY0.020125−0.12%BTC80,329.75−0.55%ETH2,329.36−1.13%
全部文章
黄金首饰教程

K 金价格详解:24K、22K、18K 及其计算方法

24K、22K 和 18K 分别代表什么,916、750 等成色印记如何与 K 数对应,怎样计算每克 K 金价格,以及如何通过金价 API 直接获取各 K 数的金价。

作者:MetalAPI Team··阅读约 9 分钟

K 数、克拉与纯度

K 数衡量的是黄金的纯度,而不是重量。纯金为 24K,因此合金的含金量等于其 K 数除以 24。18K 金由 18 份黄金和 6 份其他金属组成,例如银、铜、锌或钯,这些金属能使合金更坚硬、改变其颜色并降低成本。

Karat(K 或 kt)和 carat(ct)很容易混淆。在美式英语中,karat 表示纯度,carat 则是用于称量宝石的 200 毫克单位(克拉)。英式英语则常用 carat 同时表示这两种含义。MetalAPI 的端点名为 /carat,沿用的是更宽泛的用法,但它返回的是按纯度划分的金价,而不是按宝石重量。

将 K 金价格与黄金市场联系起来的公式很简单:

K 数为 K 的黄金每克价格 = 每金衡盎司现货价格 ÷ 31.1034768 × K ÷ 24

本文将逐一解释这个公式的各个部分,演示如何自行计算以及如何通过 API 获取,然后再看看 K 金价格与成品首饰价格之间还差了哪些因素。

K 数纯度与千分比成色

许多国家使用千分比成色(每一千份中黄金所占的份数)来标记黄金,以代替 K 数或与 K 数并列标注。两种标度可以直接相互对应:

K 数纯度(K ÷ 24)含金量成色(千分比)
24K1.0000100%1000(金条为 999 或 999.9)
23K0.958395.8%958.3
22K0.916791.7%916.7(印记为 916)
21K0.875087.5%875
20K0.833383.3%833.3
18K0.750075.0%750
16K0.666766.7%666.7
14K0.583358.3%583.3(印记为 585)
12K0.500050.0%500
10K0.416741.7%416.7(印记为 417)
9K0.375037.5%375
8K0.333333.3%333.3(印记为 333)

将这张表转换为价格时,有两个细节需要注意:

  • 印记代表的是最低标准。 585 印记表示含金量至少为 58.5%,略高于 14 ÷ 24 = 58.33%。各国有各自的标准和公差,因此一件饰品的实际成色可能略高于 K 数对应的比例。
  • 纯金并不完全等于 1.0000。 投资金条的成色通常为 999.9 或 999。MetalAPI 中的 24K 价格采用的纯度恰好为 1,因此与现货价格相等。

哪些 K 数最重要,取决于您在哪里销售。22K 和 21K 是南亚和中东大部分地区的传统首饰成色,18K 和 14K 在欧洲和北美很普遍,9K 则在英国较为常见。请支持您的客户实际购买的成色。

自行计算 K 金价格

现货黄金按每金衡盎司纯金报价。要得到每克 K 金价格,先换算单位,再按纯度折算。以 MetalAPI 文档中的示例现货价格每金衡盎司 3,997.89 美元为例(仅作示意,并非实时价格):

  1. 每克纯金价格:3,997.89 ÷ 31.1034768 = 128.5351 美元。
  2. 每克 22K 金价格:128.5351 × 22 ÷ 24 = 117.8239 美元。
  3. 每克 18K 金价格:128.5351 × 18 ÷ 24 = 96.4014 美元。

下面用 JavaScript 实现同样的计算,另附一个按成色(而非 K 数)计价的函数:

karat.mjs
const GRAMS_PER_TROY_OZ = 31.1034768;

/** 指定 K 数黄金的每克价格(24 = 纯金)。 */
export function karatPricePerGram(spotPerTroyOz, karat) {
  return (spotPerTroyOz / GRAMS_PER_TROY_OZ) * (karat / 24);
}

/** 指定千分比成色(如 585 或 916)黄金的每克价格。 */
export function finenessPricePerGram(spotPerTroyOz, fineness) {
  return (spotPerTroyOz / GRAMS_PER_TROY_OZ) * (fineness / 1000);
}

const spot = 3997.89; // 示例价格,美元/金衡盎司
for (const k of [24, 22, 21, 18, 14, 10, 9]) {
  console.log(`${k}K`, karatPricePerGram(spot, k).toFixed(4));
}
// 24K 128.5351, 22K 117.8239, 21K 112.4683, 18K 96.4014, 14K 74.9788, 10K 53.5563, 9K 48.2007
console.log("585", finenessPricePerGram(spot, 585).toFixed(4)); // 75.1931

请从已经以您的销售货币计价的现货价格出发(base=EUR、base=INR 等),这样金价和汇率就来自同一时刻。如果用另一时间获取的汇率去换算以美元计的每克价格,就会引入与黄金本身无关的误差。

如果您按印记而不是按 K 数定价,请使用按成色计算的函数。583.3 与 585 之间的差异约为金属价值的 0.3%:每克相差不大,但在一条较重的金链上就很明显了。无论选择哪种方式,都要始终如一地使用,并记录在文档中。

通过 /carat 端点获取 K 金价格

MetalAPI 的 /carat 端点会替您完成这些计算,所有付费套餐(从 Lite 起)均可使用。它接受以下参数:

  • carat:24(默认)、23、22、21、20、18、16、14、12、10、9、8 或 all。
  • base:价格的计价货币,默认为 USD。
  • unit:默认为 troy_oz;首饰场景通常选择 gram。
  • date:可选,格式为 YYYY-MM-DD,用于查询过去某一天的 K 金价格。
bash
curl "https://metalapi.com/api/v1/carat?carat=22&unit=gram&base=EUR" \
  -H "X-API-Key: $METALAPI_KEY"

以下是使用 API 参考文档中示例值的响应:

响应示例
{
  "success": true,
  "carat": "22",
  "date": "2026-10-24",
  "base": "EUR",
  "timestamp": 1792834892,
  "rates": {
    "XAU22K": { "price": 105.5297, "unit": "gram", "carat": "22", "purity": 0.916667 }
  }
}

使用 carat=all 可以在一次请求中获取所有 K 数的价格,费用与查询单个 K 数相同。每个条目以 XAU<karat>K 为键,包含价格、单位、K 数以及所采用的纯度。以下示例为节选:

响应示例(carat=all,节选)
{
  "success": true,
  "carat": "all",
  "date": "2026-10-23",
  "base": "USD",
  "timestamp": 1792765800,
  "rates": {
    "XAU24K": { "price": 128.53515, "unit": "gram", "carat": "24", "purity": 1 },
    "XAU22K": { "price": 117.82389, "unit": "gram", "carat": "22", "purity": 0.916667 },
    "XAU18K": { "price": 96.401361, "unit": "gram", "carat": "18", "purity": 0.75 },
    "XAU14K": { "price": 74.978836, "unit": "gram", "carat": "14", "purity": 0.583333 }
  }
}

在 Node.js 18 或更高版本中,读取以阿联酋迪拉姆计、每克的所有 K 数金价:

carat.mjs
const params = new URLSearchParams({ carat: "all", unit: "gram", base: "AED" });
const res = await fetch(`https://metalapi.com/api/v1/carat?${params}`, {
  headers: { "X-API-Key": process.env.METALAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.error.code} ${data.error.type}: ${data.error.info}`);

for (const row of Object.values(data.rates)) {
  console.log(`${row.carat}K: ${row.price.toFixed(2)} ${data.base} per ${row.unit}`);
}

在 Free 套餐中,/carat 会返回错误 106(plan_restriction),并附带 upgrade_url。不支持的 K 数会返回 210(invalid_carat)。使用 Free 套餐时,您仍可将上述公式应用于 /latest 返回的金价,数据按 Free 套餐的每日间隔更新。

以本地货币定价

首饰以本地货币买卖,因此请将 base 设为店铺使用的货币:卢比用 INR,迪拉姆用 AED,里拉用 TRY,英镑用 GBP。支持的 57 种货币均可使用,而且由于金价和汇率来自同一个快照,各个数字彼此一致。

bash
# 所有 K 数的金价,以印度卢比计、按克计价
curl "https://metalapi.com/api/v1/carat?carat=all&unit=gram&base=INR" \
  -H "X-API-Key: $METALAPI_KEY"

# 过去某一天的 22K 金价,以土耳其里拉计、按克计价
curl "https://metalapi.com/api/v1/carat?carat=22&unit=gram&base=TRY&date=2026-10-01" \
  -H "X-API-Key: $METALAPI_KEY"

对于以托拉(tola)报价的市场,将每克价格乘以 11.6638038,或将每金衡盎司价格乘以 0.375 即可。一根 10 托拉的金条重 116.638 克。单位换算一文给出了托拉、两(tael)和英钱(pennyweight)的精确换算系数。

三个实用要点:

  • 时效性取决于您的套餐。 /carat 返回的价格时效与您的套餐一致:Lite 每 30 分钟,Standard 每 10 分钟,最快可达 Enterprise 的每 5 秒。每天只更新几次价格牌的店铺并不需要最快的套餐。
  • 显示时间戳。 timestamp 字段可以告诉客户和审计人员价格是何时获取的。
  • 周末。 现货黄金在纽约时间周五 17:00 停止交易,周日 17:00 重新开盘,因此周末期间 K 金价格保持在周五的最后价格。

从 K 金价格到首饰价格

K 金价格是黄金含量的价值。成品首饰的价格还要加上若干组成部分,其计算方式因国家、行业惯例和商家而异。常见的组成部分包括:

  • 金属价值: 黄金净重 × 每克 K 金价格。宝石、珍珠及其他非黄金部分单独称重,不计入其中。
  • 加工费: 人工和设计费用,可按克收取、按金属价值的百分比收取,或按件收取固定金额。有些市场还会加收损耗费,以弥补制作过程中损失的金属。
  • 宝石及其他材料: 按各自的规则定价。
  • 印记或鉴定费用(如适用)。
  • 税费: 增值税、GST 或销售税。税率和规则因国家而异,有些国家对投资金和首饰的处理方式不同。例如在欧盟,投资金适用特殊的增值税豁免,但首饰不在豁免范围之内。

下面是一个将这些部分分开计算的最简报价计算器。它全程使用 Decimal,确保发票上的金额分毫不差:

quote.py
from dataclasses import dataclass
from decimal import Decimal, ROUND_HALF_UP

CENT = Decimal("0.01")


@dataclass
class QuoteInput:
    weight_g: Decimal  # 黄金净重,不含宝石
    karat_price_per_g: Decimal  # 来自 /carat?unit=gram,以您的货币计
    making_per_g: Decimal = Decimal("0")  # 每克固定加工费
    making_pct: Decimal = Decimal("0")  # 或按金属价值的比例收取
    stones: Decimal = Decimal("0")  # 单独定价
    tax_rate: Decimal = Decimal("0")  # 您所在地区适用的增值税、GST 或销售税


def jewelry_quote(q: QuoteInput) -> dict:
    metal = q.weight_g * q.karat_price_per_g
    making = q.weight_g * q.making_per_g + metal * q.making_pct
    subtotal = metal + making + q.stones
    tax = subtotal * q.tax_rate
    parts = {"metal": metal, "making": making, "stones": q.stones, "tax": tax, "total": subtotal + tax}
    return {k: v.quantize(CENT, rounding=ROUND_HALF_UP) for k, v in parts.items()}


# 仅为示意输入:10 克 22K 金,按示例价格每克 117.8239 计算,
# 加工费 12%,税率 20%。
print(jewelry_quote(QuoteInput(
    weight_g=Decimal("10"),
    karat_price_per_g=Decimal("117.8239"),
    making_pct=Decimal("0.12"),
    tax_rate=Decimal("0.20"),
)))

使用上述输入,它会输出金属价值 1178.24、加工费 141.39、税费 263.93,总计 1583.55。加工费和税率只是占位值,并非建议。是否征税、对哪些部分征税以及税率多少,请咨询您的会计师或税务顾问。

本文仅讲解计算方法,不构成投资、定价或税务建议。

回购与废金价值

从客户手中回购黄金的计算方向正好相反。起点同样是金属价值,但应以实际测得的成色为准,而不是印记所标注的 K 数:

废金价值 = 克重 × 成色 ÷ 1,000 × 每克现货价格 − 精炼及处理扣费

收购方通常会检测成色,例如采用 XRF 分析或酸试法,因为较旧的饰品可能达不到其印记标准,而金链中的焊料也会拉低平均纯度。请在代码中将扣费作为明确且有文档说明的参数,而不是将其隐藏在压低的现货价格中,这样它才能在报价和审计中清晰呈现。

这里请使用每克 24K 价格(或带 unit=gram 的 /latest)作为现货价格,再自行应用测得的成色。/carat 返回的 K 金价格假定纯度恰好为 K ÷ 24,这适用于按 K 数为新品定价,但不适用于 912 这样的检测结果。

实施清单

  • 一次性请求 carat=all,并按套餐的更新间隔进行缓存,而不是每个 K 数或每个商品各调用一次。
  • 在每份报价和订单中保存所用的价格、时间戳和纯度,以便日后能够解释每个数字的来源。
  • 使用 date 查询历史 K 金价格,例如在重新核算旧发票时。通过 API 获取黄金和白银历史价格一文介绍了更长的时间范围和本地存储。
  • 只在显示时进行四舍五入,并使用每种货币各自的小数位数。
  • 将 API 密钥保存在服务器上。如果想在网店中显示金价牌而又不想编写代码,可以使用可嵌入小组件。
  • 如果只需要一两种 K 数,在 /latest 数据上套用公式即可,所有套餐均适用。/carat 则省去了计算,在付费套餐中直接返回现成且一致的数字。

API 文档介绍了 /carat 的每个参数,定价页面列出了包含该端点的套餐,黄金价格 API 指南则全面介绍了密钥、错误处理和缓存。如果想用您自己的商品目录试一试,请注册获取密钥。

用您自己的数据试一试

创建免费账户,两分钟内即可发起第一次请求。每月 100 次请求,无需信用卡。

继续阅读